我是opencv-python
的新手。我通过houghtransformP
找到了图像中的线条。从霍夫变换绘制的线是不连续的,并给出多条线。我只需要为边缘画一条线,然后找到所找到的线之间的“距离”即可。
输出图像如下所示
"""
Created on Fri Nov 8 11:41:16 2019
@author: romanth.chowan
"""
import cv2
import numpy as np
import math
def getSlopeOfLine(line):
xDis = line[0][2] - line[0][0]
if (xDis == 0):
return None
return (line[0][3] - line[0][1]) / xDis
if __name__ == '__main__':
inputFileName_ =r"C:\Users\romanth.chowan\Desktop\opencv\stent spec\2prox.jpeg"
img = cv2.imread(inputFileName_)
img1=cv2.GaussianBlur(img,(5,5),0)
gray = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
edges = cv2.Laplacian(gray,cv2.CV_8UC1) # Laplacian Edge Detection
lines = cv2.HoughLinesP(edges,1,np.pi / 180,300,10,10)
print(len(lines))
parallelLines = []
for a in lines:
for b in lines:
if a is not b:
slopeA = getSlopeOfLine(b)
slopeB = getSlopeOfLine(b)
if slopeA is not None and slopeB is not None:
if 0 <= abs(slopeA - slopeB) <= 10:
parallelLines.append({'lineA': a,'lineB': b})
for pairs in parallelLines:
lineA = pairs['lineA']
lineB = pairs['lineB']
leftx,boty,rightx,topy = lineA[0]
cv2.line(img,(leftx,boty),(rightx,topy),(0,255),2)
left_x,bot_y,right_x,top_y = lineB[0]
cv2.line(img,(left_x,bot_y),(right_x,top_y),2)
cv2.imwrite('linesImg.jpg',img)
画线后输出图像: