【问题标题】:Increase accuracy of detecting lines using OpenCV使用 OpenCV 提高检测线的准确性
【发布时间】:2019-07-17 17:01:47
【问题描述】:

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

输入图像示例:

想要的图片:

我目前的实现:

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)

【问题讨论】:

标签: python image opencv image-processing computer-vision


【解决方案1】:

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


我们使用cv2.filter2D() 应用锐化内核,它为我们提供了线条的大致形状并去除了模糊部分。其他过滤器可以找到here

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

存在一些小的缺陷,因此我们可以使用带有cv2.MORPH_ELLIPSE 内核的形态学运算来获得干净的钻石形状

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

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

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()

【讨论】:

  • 谢谢!我会试一试
  • 你能解释一下锐化内核的值吗?这是一个通用的锐化内核还是值会因图片而异。
  • 这是一个通用的锐化内核。本质上是为了锐化图像,在内核和图像之间执行卷积。在 opencv 中,cv2.filter2D() 本质上就是做这个卷积。你可以尝试其他内核here
【解决方案2】:

您正在寻找图像锐化技术。你会发现建议here。 您可以使用不同的内核操作来实现这一点。 OpenCV 列出了这个 C++ 代码here

 // sharpen image using "unsharp mask" algorithm
Mat blurred; double sigma = 1, threshold = 5, amount = 1;
GaussianBlur(img, blurred, Size(), sigma, sigma);
Mat lowContrastMask = abs(img - blurred) < threshold;
Mat sharpened = img*(1+amount) + blurred*(-amount);
img.copyTo(sharpened, lowContrastMask);

转换成 Python 应该相当容易。

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 2013-03-02
    • 2023-04-05
    • 2016-04-02
    • 2013-12-10
    • 2020-01-17
    • 2021-04-25
    • 1970-01-01
    • 2011-10-06
    相关资源
    最近更新 更多