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

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

我正在尝试获取并绘制图像中的角点。现在,我有一个元组列表,格式如下:(row,column,scale)(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() 工作。这是我做错的唯一一件事吗?没有太多关于此的文档。

谢谢!

最佳答案

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

只需输入

corners.shape

验证这一点。

输入

corners.dtype

检查您使用的是 float32。

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

featuresy1 = np.array(featuresy1)

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

关于python - 如何在 Python 中使用 OpenCV cornerSubPix()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40461469/

相关文章:

java - 如何正确将 Maven 翻译为 gradle

java - 无法在opencv android(Java)中应用掩码

feature-extraction - 如何使用 Opencv 从 Harris Corner Detector 中提取关键点

c++ - 快速算法 : No Corner Detection in Rectangular shapes

matlab - 按顺时针顺序检测非凸多边形的角坐标 MATLAB

python - 具有不同统计显着性水平的数据的 numpy polyfit

python - Pipenv 始终无法锁定并产生大量错误输出

python - 输入提示和@singledispatch : how do I include `Union[...]` in an extensible way?

python - 处理 Dataframe 列中的列表

c++ - 使用 OpenCV 的 imread() 从 qrc 读取图像