Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 虚线图像中的Opencv跟踪线_Python_Python 3.x_Opencv_Machine Learning_Image Processing - Fatal编程技术网

Python 虚线图像中的Opencv跟踪线

Python 虚线图像中的Opencv跟踪线,python,python-3.x,opencv,machine-learning,image-processing,Python,Python 3.x,Opencv,Machine Learning,Image Processing,我有以下图片:命名为“normalized.png”。我试图从虚线中画实线 我尝试过类似hough线变换的方法: import cv2 import numpy as np img = cv2.imread('Normalised.png') gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) edges = cv2.Canny(gray,50,150,apertureSize = 3) minLineLength = 100 maxLineGap = 10

我有以下图片:命名为“normalized.png”。我试图从虚线中画实线

我尝试过类似hough线变换的方法:

import cv2
import numpy as np

img = cv2.imread('Normalised.png')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
minLineLength = 100
maxLineGap = 10
lines = cv2.HoughLinesP(edges,1,np.pi/180,100,minLineLength,maxLineGap)
for x1,y1,x2,y2 in lines[0]:
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)

cv2.imwrite('houghlines5.jpg',img)
但由于未检测到“边缘”,因此代码在“边缘”上似乎失败

输入图像

预期输出图像

如何实现此输出?

默认情况下,适用于直线。但是,您可以使用cv2.HOUGH_概率检测曲线,如下所示:

img = cv.imread("Dilate.png")

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray, 150, 200, apertureSize=3)
cv.imwrite("Canny.png", edges)
element = cv.getStructuringElement(cv.MORPH_RECT, (5, 3), (-1, -1))
dilated = cv.dilate(edges, element)
cv.imwrite("Eroded.png", dilated)

minLineLength = 200
maxLineGap = 5

lines = cv.HoughLinesP(dilated, cv.HOUGH_PROBABILISTIC, np.pi/180, 150, minLineLength, 
                       maxLineGap)

for x in range(0, len(lines)):
    for x1, y1, x2, y2 in lines[x]:
        pts = np.array([[x1, y1], [x2, y2]], np.int32)
        cv.polylines(img, [pts], True, (0, 255, 0))

cv.imwrite('dilate_final.png', img)
注意线条是如何绘制的

结果不完全是你们想要的,但接近,并要求你们调整参数,我将留给你们。希望有帮助

默认情况下,适用于直线。但是,您可以使用cv2.HOUGH_概率检测曲线,如下所示:

img = cv.imread("Dilate.png")

gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
edges = cv.Canny(gray, 150, 200, apertureSize=3)
cv.imwrite("Canny.png", edges)
element = cv.getStructuringElement(cv.MORPH_RECT, (5, 3), (-1, -1))
dilated = cv.dilate(edges, element)
cv.imwrite("Eroded.png", dilated)

minLineLength = 200
maxLineGap = 5

lines = cv.HoughLinesP(dilated, cv.HOUGH_PROBABILISTIC, np.pi/180, 150, minLineLength, 
                       maxLineGap)

for x in range(0, len(lines)):
    for x1, y1, x2, y2 in lines[x]:
        pts = np.array([[x1, y1], [x2, y2]], np.int32)
        cv.polylines(img, [pts], True, (0, 255, 0))

cv.imwrite('dilate_final.png', img)
注意线条是如何绘制的

结果不完全是你们想要的,但接近,并要求你们调整参数,我将留给你们。希望有帮助

一个可能的方案(尽管整个任务似乎非常紧迫):

  • 选择少量均匀分布的方向(如5)

  • 在各个方向

    • 在该方向平滑(f.i.具有非常细长的高斯曲线)或

    • 在该方向腐蚀(使用线性结构元素),或两者都腐蚀,以便更好地连接点

    • 使用阈值进行二值化,使点接触

    • 应用形态加厚以获得细黑线

  • 合并所有获得的贴图(最大操作)

  • 清理

一个可能的方案(尽管整个任务似乎非常紧迫):

  • 选择少量均匀分布的方向(如5)

  • 在各个方向

    • 在该方向平滑(f.i.具有非常细长的高斯曲线)或

    • 在该方向腐蚀(使用线性结构元素),或两者都腐蚀,以便更好地连接点

    • 使用阈值进行二值化,使点接触

    • 应用形态加厚以获得细黑线

  • 合并所有获得的贴图(最大操作)

  • 清理


你试过吗?@RickM。是的,我试过了。此外,还尝试了遮光、打开和顶帽。但是他们没有给出预期的结果来证明扫描的质量。垃圾进来,垃圾出去。你试过了吗?@RickM。是的,我试过了。此外,还尝试了遮光、打开和顶帽。但是他们没有给出预期的结果来证明扫描的质量。垃圾进来,垃圾出去。