我试图在图像中获取并绘制角点。现在,我有了一个元组列表,其格式如下:(row,column,scale)
(比例是因为我使用的是高斯金字塔),从harrisCornerDetector和nonMaximumSuppression进程手动获得。此列表为featuresy1
。
我的代码如下:
r,g,b=cv2.split(image)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)
cv2.cornerSubPix( r, featuresy1, (5,5), (-1,1), criteria )
这里image是一个灰度图像,有三个相同的形状。如你所见,我给cornerSubPix
作为第二个参数,一个如下的结构:[(x1,y1,scale1),(x2,y2,scale2),...,(xn,yn,scalen)]
.
这将引发以下错误:
cv2.cornerSubPix( r, featuresy1, (5,5), (-1,1), criteria )
TypeError: corners is not a numpy array, neither a scalar
因此,我想知道什么类型、格式或结构应该有featuresy1
来完成cornerSubPix()
的工作。这是我唯一做错的事情吗?没有太多关于这方面的文档。
谢谢你!
1条答案
按热度按时间f8rj6qna1#
你需要确保
corners
是一个三维的numpy数组(n, 1, 2)
,其中n是角的个数,并且必须是float32类型。只需键入
以验证这一点。
键入
要检查您是否正在使用float32。
在我看来,你的角
featuresy1
是一个列表,它应该是一个numpy数组。首先将它转换为numpy数组:Opencv有一个简单的understand example,可能会帮助你