gpt4 book ai didi

python - ConvexHull 检测矩形(四边形)

转载 作者:太空宇宙 更新时间:2023-11-03 22:04:19 61 4
gpt4 key购买 nike

我想检测图像中的矩形

我使用 cv2.findContours()cv2.convexHull() 过滤掉不规则多边形。

之后,我将使用船体长度来判断轮廓是否为矩形。

hull = cv2.convexHull(contour,returnPoints = True)
if len(hull) ==4:
return True

但是,有时,convexHull() 会返回一个长度为 5 的数组。如果我使用上面的标准,我会错过这个矩形。

例如, enter image description here

使用cv2.canny()之后 enter image description here

通过使用上面的方法,我将得到船体:

 [[[819 184]]

[[744 183]]

[[745 145]]

[[787 145]]

[[819 146]]]

enter image description here


这是我的问题:给定一个长度为 5 的数组 (Convex Hull),我如何确定它是否实际上指的是四边形?谢谢。

============================================= ======================更新:

使用Sobel X和Y方向后,

sobelxy = cv2.Sobel(img_inversion, cv2.CV_8U, 1, 1, ksize=3)

我得到: enter image description here

最佳答案

嗯,这不是提取矩形的正确方法。由于我们在这里讨论基础知识,我建议您对图像进行反转并在 X 和 Y 方向应用 Sobel,然后运行 ​​findcontours 函数。然后用这个你将能够得到很多你可以过滤掉的矩形。您将不得不应用大量检查来识别其中包含文本的矩形。另外我不明白你为什么要强制选择长度为 5 的矩形。你在限制比例。

其次,另一种方法是使用 Sobel X 和 Y 图像,然后应用 OpenCVs LineSegmentDetector。一旦你得到所有的线段,你必须为(Quad fit)应用 RANSAC 所以这里的条件应该是一组随机选择的相交线上的所有角度应该是锐角(大致),最后用文本过滤掉四边形 roi(为此使用 SWT 或其他可靠的技术)。

对于您的查询,您应该选择理想长度为 4(点)的四边形。

引用:Crop the largest rectangle using OpenCV

此链接将为您提供以非常简单的方式检测矩形的要点。

下图为您提供了图像反演和 sobel 的演练。图像反转消除了您从 sobel 获得的双边界。

对于反转,您使用波浪号运算符。

enter image description here

同样在进行反转之前,最好抑制照明伪影。这可以使用同态过滤来完成。或记录图像。

关于python - ConvexHull 检测矩形(四边形),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39071418/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com