我们正在制作一款游戏,您可以在其中使用网格纸制作自己的关卡。
第一步是检测关卡的边界,所以我在关卡周围制作了一个较厚的黑色边框作为边缘。这是图片:https ://imgur.com/a/Wx3p7Ci
我首先将图像编辑为灰色,应用 GaussianBlur 和adaptiveThreshold。这是结果:https ://imgur.com/a/dp0G4my
我认为普通 Houghlines 并不是一个真正的选择,因为它检测到这么多线条并丢失了较粗的线条。findContour 我没有得到可用的结果,因为网格纸中有很多形状。
所以我最终选择了 HoughLinesP,结果如下:https ://imgur.com/a/yvIpYNy
所以它正确地检测到了矩形的一部分,就是这样。我会有另一个想法,它依赖于不理想的颜色(人们需要特定的颜色),但我不知道有什么好的方法。
这是我目前用于 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)