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

rdrgkggo  于 2022-12-13  发布在  Python
关注(0)|答案(1)|浏览(156)

我试图在图像中获取并绘制角点。现在,我有了一个元组列表,其格式如下:(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()的工作。这是我唯一做错的事情吗?没有太多关于这方面的文档。
谢谢你!

f8rj6qna

f8rj6qna1#

你需要确保corners是一个三维的numpy数组(n, 1, 2),其中n是角的个数,并且必须是float32类型。
只需键入

corners.shape

以验证这一点。
键入

corners.dtype

要检查您是否正在使用float32。
在我看来,你的角featuresy1是一个列表,它应该是一个numpy数组。首先将它转换为numpy数组:

featuresy1 = np.array(featuresy1)

Opencv有一个简单的understand example,可能会帮助你

相关问题