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

8
我正在尝试获取并绘制图像中的角点。现在,我有一个元组列表,格式如下:(行,列,比例)(比例是因为我使用了高斯金字塔),手动从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 )

其中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个回答

0

您需要确保corners是一个3维numpy数组,其形状为(n, 1, 2),其中n是角点的数量。它还必须是float32类型。

只需输入:

corners.shape

为了验证这个。

输入

corners.dtype

检查您是否正在使用float32。

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

featuresy1 = np.array(featuresy1)

Opencv有一个易于理解的示例,可能会对您有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接