Python 用OpenCV检测网格纸上线条较粗的最大矩形

Python 用OpenCV检测网格纸上线条较粗的最大矩形,python,opencv,houghlines,Python,Opencv,Houghlines,我们正在制作一个游戏,你可以使用网格纸来制作自己的关卡 第一步是检测标高的边界,因此我在标高周围为边缘制作了一个较厚的黑色边框。 这是图像: 我首先将图像编辑为灰色,应用高斯模糊和自适应阈值。 结果是: 我认为,正常的Houghlines并不是一个真正的选项,因为它检测到了太多的线条,并丢失了较粗的线条。 findContour我没有一个可用的结果,因为网格纸中有这么多形状 因此,我最终选择了HoughLinesP,结果是: 所以它正确地检测出矩形的一部分,就是它。我会有另一个想法,那就是依赖于

我们正在制作一个游戏,你可以使用网格纸来制作自己的关卡

第一步是检测标高的边界,因此我在标高周围为边缘制作了一个较厚的黑色边框。 这是图像:

我首先将图像编辑为灰色,应用高斯模糊和自适应阈值。 结果是:

我认为,正常的Houghlines并不是一个真正的选项,因为它检测到了太多的线条,并丢失了较粗的线条。 findContour我没有一个可用的结果,因为网格纸中有这么多形状

因此,我最终选择了HoughLinesP,结果是:

所以它正确地检测出矩形的一部分,就是它。我会有另一个想法,那就是依赖于不理想的颜色(人们需要一种特定的颜色),但我不知道这是什么好方法

这是我目前拥有的HoughLinesP代码

import cv2 as cv
import numpy as np

# from openCV.main import contours

image = cv.imread("grey-grid-blackborder.jpg")
cv.imshow("Image", image)

gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
cv.imshow("Gray", gray)

blur = cv.GaussianBlur(gray, (5, 5), 0)
cv.imshow("blur", blur)

thresh = cv.adaptiveThreshold(blur, 255, 1, 1, 11, 2)
cv.imshow("thresh", thresh)

grid = image

minLineLength = 1
maxLineGap = 0
# lines = cv.HoughLinesP(thresh, 1, np.pi / 180, 100, minLineLength, maxLineGap)
lines = cv.HoughLinesP(thresh, 1, np.pi / 180, 100, minLineLength=minLineLength, maxLineGap=maxLineGap)
for x1, y1, x2, y2 in lines[0]:
    cv.line(grid, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv.imshow("grid", grid)

cv.waitKey(0)

您可以尝试在cv.cvtColor之后使用形态学膨胀或闭合。您应该设置图像阈值,以便网格线和白色背景变为白色,矩形变为黑色。然后倒过来。然后得到轮廓线。