Python cv2 HoughLines网格线检测

倔强

我在图像中有一个简单的网格,我试图确定网格大小,例如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的绿线)

我不能简单地将行数除以2,因为(取决于网格的大小)有时只画一条线。

如何为原始图像中检测到的每条线更准确地检测并绘制一条线?

我调整了阈值设置,将图像缩小为黑白,但仍然得到多行。我认为这是因为检测到了精巧的边缘?

倔强

我最终遍历了这些行并删除了彼此相差10像素以内的行:

lines = cv2.HoughLinesP(edges,1,np.pi/180,275, minLineLength = 600, maxLineGap = 100)[0].tolist()

for x1,y1,x2,y2 in lines:
    for index, (x3,y3,x4,y4) in enumerate(lines):

        if y1==y2 and y3==y4: # Horizontal Lines
            diff = abs(y1-y3)
        elif x1==x2 and x3==x4: # Vertical Lines
            diff = abs(x1-x3)
        else:
            diff = 0

        if diff < 10 and diff is not 0:
            del lines[index]

gridsize = (len(lines) - 2) / 2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用cv2和python从图像中检测数字

来自分类Dev

在cv2中检测/避免“ JPEG的过早结尾”-python

来自分类Dev

Python cv2中的皮肤检测和背景扣除

来自分类Dev

在cv2中检测/避免“ JPEG的过早结尾”-python

来自分类Dev

Python cv2中的皮肤检测和背景扣除

来自分类Dev

用 cv2 在 python 中的手绘图像上连接角的线

来自分类Dev

绘制cv :: HoughLines检测到的线

来自分类Dev

导入cv2时出现python importError

来自分类Dev

使用cv2库在python中遍历轮廓的问题

来自分类Dev

Python CV2 MSER无法正常工作

来自分类Dev

如何在Python中使用cv2显示图像

来自分类Dev

如何为Python OpenCV CV2更新imshow()窗口

来自分类Dev

无法在OSX中的python中导入cv2

来自分类Dev

使用cv2无法在python中填充图像的“空洞”

来自分类Dev

数组操作使用numpy扩充图像Python cv2

来自分类Dev

Python cv2没有足够的值来解压

来自分类Dev

python cv2中的cvPOSIT opencv算法

来自分类Dev

CV2:Python OpenCV 中的导入错误

来自分类Dev

python3 导入 cv2 失败

来自分类Dev

无法在 Spyder (Python 3.7) 上导入 CV2

来自分类Dev

cx_Freeze没有检测到cv2

来自分类Dev

cv2 轮廓无法检测某些形状

来自分类Dev

更改 ggplot2 中次要网格线的数量(每个主要网格线),r

来自分类Dev

运行“导入cv”或“导入cv2”时,Python“段错误:11”

来自分类Dev

Python win32com,如何隐藏网格线

来自分类Dev

从python的绘图边界中排除网格线?

来自分类Dev

在python中的点之间绘制网格线

来自分类Dev

JavaFx 2.x:如何绘制较小的网格线

来自分类Dev

使ggplot2中的单个网格线更粗