gpt4 book ai didi

python - 使用 OpenCV 提高检测线的准确性

转载 作者:太空狗 更新时间:2023-10-30 00:34:04 27 4
gpt4 key购买 nike

我正在实现一个程序来检测相机图像中的线条。问题是当照片模糊时,我的线条检测算法会遗漏几条线条。有没有办法在不编辑参数的情况下提高 cv.HoughLines() 函数的准确性?

示例输入图像:

Blurry.

想要的图片:

enter image description here

我当前的实现:

def find_lines(img):
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
edges = cv.dilate(gray,np.ones((3,3), np.uint8),iterations=5)
edges = cv.Canny(gray, 50, 150, apertureSize=3)
lines = cv.HoughLines(edges, 1, np.pi/180, 350)

最佳答案

最好在将图像提供给 cv2.HoughLines() 之前对图像进行预处理。另外我认为 cv2.HoughLinesP() 会更好。这是一个简单的方法


我们使用 cv2.filter2D() 应用锐化内核这给了我们线的一般形状并删除了模糊的部分。可以找到其他过滤器 here .

enter image description here

现在我们对图像进行阈值处理以获得实线

enter image description here

存在一些小瑕疵,因此我们可以使用带有cv2.MORPH_ELLIPSE 内核的形态学操作来获得干净的菱形

enter image description here

最后为了得到想要的结果,我们dilate使用相同的内核。根据迭代次数,我们可以获得更细或更宽的线条

左 (iterations=2),右 (iterations=3)

enter image description here enter image description here

import cv2
import numpy as np

image = cv2.imread('1.png', 0)
sharpen_kernel = np.array([[-1,-1,-1], [-1,9,-1], [-1,-1,-1]])
sharpen = cv2.filter2D(image, -1, sharpen_kernel)
thresh = cv2.threshold(sharpen,220, 255,cv2.THRESH_BINARY)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=3)
result = cv2.dilate(opening, kernel, iterations=3)

cv2.imshow('thresh', thresh)
cv2.imshow('sharpen', sharpen)
cv2.imshow('opening', opening)
cv2.imshow('result', result)
cv2.waitKey()

关于python - 使用 OpenCV 提高检测线的准确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57080937/

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