python - 使用 Python 在 OpenCV 中进行 Harris 角点检测和定位

标签 python opencv feature-detection corner-detection

我正在使用以下代码来尝试检测多段线的角以“测量”线条。该代码基于我在某处找到的片段 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/

相关文章:

python - 在 Django REST Framework 中将一组对象作为单个字典写入

opencv - 无法使用opencv-python读取TIFF图像

css - 嵌套 CSS @supports 和 @media 查询

c++ - 检测图像中的点并进行比较

java - Android 上使用 OpenCV 在实时相机预览中进行实时 Logo 检测

python - Tkinter Canvas 自动调整大小

python - 无法使用 pip 安装 timeit。我怎样才能解决这个问题?

apache2 上的 Python 索引页面

python - 读取流 OpenCV

opencv - 如何最小化人脸检测错误