OpenCV:检测到矩形边的多条线和不正确的“y”边绘制

yfjy0ee7  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(119)

我正在使用Python中的OpenCV库,尝试检测图像中矩形形状的长边和短边。我使用了Canny边缘检测器,然后应用Hough变换来检测线条。然而,我遇到了一个问题,即输出检测到多条相同长度的线条,并且无法正确绘制'y'边缘。
下面是我的代码的简化版本:

import cv2
import numpy as np

img = cv2.imread(r"C:\Users\Asus Hn004W\Desktop\1.jpeg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 78, 106, apertureSize=3)

lines = cv2.HoughLines(edges, 1, np.pi/180, 200)

for r_theta in lines:
    arr = np.array(r_theta[0], dtype=np.float64)
    r, theta = arr
    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a*r
    y0 = b*r

    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))

    cv2.line(img, (x1, y1), (x2, y2), (0, 0, 255), 2)

cv2.imshow('', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

我想知道为什么检测到多条相同长度的线,为什么不能正确绘制“y”边。我应该对代码进行哪些修改才能准确检测和绘制矩形的边?
感谢您的帮助enter image description here

epggiuax

epggiuax1#

多行
所有投票超过阈值的结果将从HoughLines()返回。
所以,你应该使用一些后处理来决定你的结果。通常使用的方法称为“非最大抑制”。
未正确绘制“y”边
也许,你的阈值(200)对于垂直线来说太大了(或者canny的结果不好)。

相关问题