如何从python中的模糊图像中找到变形矩形的准确角位置?

问题描述 投票:1回答:1

我正在寻找一种使用Python中的OpenCV准确检测变形矩形的角的过程。

我已经通过谷歌搜索尝试了不同建议的解决方案,但是通过直线的正弦叠加(请参见阈值图像),我可能无法检测到拐角。到目前为止,我尝试过findContours和HoughLines,但效果不佳。不幸的是,我不理解how to find blur corner position with opencv?

中徐斌的C代码

这是我的初始图像:

enter image description here

调整大小和阈值后,我应用精巧边缘检测以获取以下图像:

contours, hierarchy = cv2.findContours(g_mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
box = cv2.minAreaRect(contour)
box = cv2.cv.BoxPoints(box) if imutils.is_cv2() else cv2.boxPoints(box)
box = np.array(box, dtype="float")
box = perspective.order_points(box)

我只能通过一些额外的绘图获得以下结果:

我以为进行拟合将是解决问题的一种好方法,但是很遗憾,我无法使HoughLines正常工作,并且在查看OpenCV Python - How to implement RANSAC to detect straight lines?后,RANSAC似乎也很难解决我的问题。

非常感谢您的帮助。

python opencv edge-detection image-thresholding corner-detection
1个回答
0
投票

要检测拐角,可以使用cv2.goodFeaturesToTrack()。该函数有四个参数

cv2.goodFeaturesToTrack()
  • corners = cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance) -输入8位或浮点32位灰度单通道图像
  • image-要返回的最大拐角数
  • maxCorners-0-1之间的最小可接受拐角质量等级。低于质量水平的所有角点均被拒绝]
  • [qualityLevel-角之间的最小欧式距离
  • 现在我们知道如何找到角,我们必须找到旋转的矩形并应用该函数。这是一种方法:


我们首先放大图像,转换为灰度,应用双边滤波器,然后使用Otsu的阈值获得二进制图像

接下来,我们通过使用minDistance查找轮廓来找到变形的矩形,然后获得以绿色突出显示的旋转边界框。我们将此边界框绘制到蒙版上

现在有了遮罩,我们只需使用cv2.findContours()在遮罩上找到拐角

这是原始输入图像的结果以及每个角的cv2.goodFeaturesToTrack()坐标

角点

(x, y)

代码

(377.0, 375.0)
(81.0, 344.0)
(400.0, 158.0)
(104.0, 127.0)
© www.soinside.com 2019 - 2024. All rights reserved.