我在图像中有一个简单的网格,我正在尝试确定网格大小,例如 6x6、12x12 等。使用 Python 和 cv2。
我正在使用上面的 3x3 网格对其进行测试,我计划通过在图像中检测它们来计算有多少垂直/水平线来确定网格大小:
import cv2
import numpy as np
im = cv2.imread('photo2.JPG')
gray = cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
imgSplit = cv2.split(im)
flag,b = cv2.threshold(imgSplit[2],0,255,cv2.THRESH_OTSU)
element = cv2.getStructuringElement(cv2.MORPH_CROSS,(1,1))
cv2.erode(b,element)
edges = cv2.Canny(b,150,200,3,5)
while(True):
img = im.copy()
lines = cv2.HoughLinesP(edges,1,np.pi/2,2, minLineLength = 620, maxLineGap = 100)[0]
for x1,y1,x2,y2 in lines:
cv2.line(img,(x1,y1),(x2,y2),(0,255,0),1)
cv2.imshow('houghlines',img)
if k == 27:
break
cv2.destroyAllWindows()
我的代码检测到这些行,如下所示,但是我的图像中的每一行都检测到多行:
(图像中的每一行都画了两条 1px 的绿线)
我不能简单地将线数除以二,因为(取决于网格大小)有时只会绘制一条线。
如何更准确地检测并为原始图像中检测到的每条线绘制一条线?
我调整了阈值设置,将图像缩小为黑白,但我仍然得到多条线。我认为这是因为精明的边缘检测?