【发布时间】:2017-01-05 16:07:51
【问题描述】:
我是使用 OpenCV 的新手,在检测图像中的角时遇到问题。假设我有一个像这样的图像网格,其中有多个角。
我只想捕捉 4 个极端的角,以红色突出显示。
使用cv2.cornerHarris(),我已经设法准确地突出了所有可能的角落,但我找不到调整这些值的方法,只保留4个极端。
这是我的代码:
import cv2
import numpy as np
filename = 'start.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,29,0.04)
#result is dilated for marking the corners, not important
dst = cv2.dilate(dst,None)
# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()
我从 OpenCV 官方网站获得了这段代码,并且我调整了一些值。
有人可以帮忙吗?我是在完全错误的方向吗?如果我不清楚我想要的是我在问题中附加的输出图像,而我的代码只是给了我网格中所有可能的角。
网格不是从坐标 x,y = 0,0 开始
提前谢谢大家
【问题讨论】:
-
可能你可以尝试对图像使用霍夫变换。这将为您提供图像中所有线段的坐标(开始,结束)。然后,如果正方形未在图像中旋转,您可以将它们与角哈里斯中找到的角进行比较。
标签: python opencv image-processing