我正在使用以下代码来尝试检测多段线的角以“测量”线条。该代码基于我在某处找到的片段 on SO并且基于 cv2.cornerHarris() :
cornerimg = cv2.cornerHarris( gray, # src
2, # blockSize
3, # ksize / aperture
0.04 # k
# dst
# borderType
)
# ?
cornerimg = cv2.normalize( cornerimg, # src
None, # dst
0, # alpha
255, # beta
cv2.NORM_MINMAX, # norm type
cv2.CV_32FC1, # dtype
None # mask
)
# ?
cornerimg = cv2.convertScaleAbs( cornerimg )
cornershow = cornerimg.copy()
# iterate over pixels to get corner positions
w, h = gray.shape
for y in range(0, h):
for x in range (0, w):
#harris = cv2.cv.Get2D( cv2.cv.fromarray(cornerimg), y, x)
#if harris[0] > 10e-06:
if cornerimg[x,y] > 64:
print("corner at ", x, y)
cv2.circle( cornershow, # dest
(x,y), # pos
4, # radius
(115,0,25) # color
)
cv2.imshow('harris cornerimg', cornershow)
原始代码会在角落位置产生白点,并且级别似乎是“corneryness”的指标。 代码片段(已更新为使用 cv2)迭代生成的图像并扫描大于 10e-06 的值,出于某种原因,我已将其替换为我认为应该是图像亮度的比较。
但是,在这些位置绘制的圆圈与标准化哈里斯输出中发现的实际热点相去甚远。
我做错了什么?
或者,cv2.goodFeaturesToTrack()可以设置为使用 Harris (useHarrisDetector=True),但我尝试使用它并没有导致 cornerHarris 似乎正确检测到什么:
cv2.goodFeaturesToTrack( blurred, # img
500, # maxCorners
0.03, # qualityLevel
10, # minDistance
None, # corners,
None, # mask,
2, # blockSize,
useHarrisDetector=True, # useHarrisDetector,
k=0.04 # k
)
对 cv2.cornerHarris() 的等效函数调用是什么?
最佳答案
输出似乎被转置,交换正方形图像上的 x 和 y 索引修复它(圆圈位于角最大值)。
关于python - 使用 Python 在 OpenCV 中进行 Harris 角点检测和定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18255958/