如何在Python中使用OpenCV cornerSubPix()?

时间:2016-11-07 09:13:08

标签: python opencv corner-detection non-maximum-suppression

我试图在图像中绘制角点。现在,我有一个具有以下格式的元组列表:(row,column,scale)(缩放是因为我使用高斯金字塔),从harrisCornerDetector和nonMaximumSupression进程手动获取。此列表为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 )

图像是灰度图像,具有三个相同的形状。正如您所看到的,我将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 个答案:

答案 0 :(得分:0)

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

输入

corners.shape

验证这一点。

输入

corners.dtype

检查您是否正在使用float32。

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

featuresy1 = np.array(featuresy1)

Opencv易于understand example可能会帮助您