2016-11-07 428 views
2

我试图获取并在图像中绘制角点。现在,我有一个使用以下格式的元组列表:(row,column,scale)(规模是因为我使用的是高斯金字塔),它是从harrisCornerDetector和nonMaximumSupression过程手动获得的。该列表是featuresy1如何在Python中使用OpenCV cornerSubPix()?

我的代码如下:

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) 

其中图像是在灰度与三个相同形状的图像。正如你所看到的,我给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 

出于这个原因,我不知道是什么类型,格式或结构应具有featuresy1cornerSubPix()工作。这是我做错的唯一的事情吗?没有太多关于这方面的文件。

谢谢!

回答

0

您需要确保corners是3维(n, 1, 2)的numpy阵列,其中n是角的数量。它也必须是一个float32类型。

只需键入

corners.shape 

验证这一点。

键入

corners.dtype 

要检查你正在使用FLOAT32。

对我来说,看起来像你的角落featuresy1列出它应该是一个numpy数组。首先将其转换为一个numpy的数组:

featuresy1 = np.array(featuresy1) 

OpenCV的一个易于understand example可以帮助你