Python 虚线图像中的Opencv跟踪线
我有以下图片:命名为“normalized.png”。我试图从虚线中画实线 我尝试过类似hough线变换的方法: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
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.具有非常细长的高斯曲线)或
- 在该方向腐蚀(使用线性结构元素),或两者都腐蚀,以便更好地连接点
- 使用阈值进行二值化,使点接触
- 应用形态加厚以获得细黑线
- 合并所有获得的贴图(最大操作)
- 清理