6

我正在尝试获取并绘制图像中的角点。现在,我有一个具有以下格式的元组列表:((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 )

其中 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

出于这个原因,我想知道应该用什么类型、格式或结构featuresy1cornerSubPix()工作。这是我唯一做错的事情吗?没有太多关于此的文档。

谢谢!

4

1 回答 1

0

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

只需键入

corners.shape

来验证这一点。

输入

corners.dtype

检查您是否使用 float32。

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

featuresy1 = np.array(featuresy1)

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

于 2017-05-09T08:37:53.467 回答