使用opencv和python_new进行激光曲线检测

时间:2017-05-24 15:39:29

标签: python opencv line detection

Original Image

您好,我是opencv世界的新手。我想通过线激光三角测量来检测弯曲边缘。我有一张激光线的照片,现在想要编辑图像,所以我只看到一条平均线(drawContour)。仅用激光记录图像。这条线有点交织在一起。

现在我的问题/思考过程:如何转换二值化(阈值)图片以使颜色值(一切为白色)和其余部分为黑色?

然后我需要所有值的平均值(min-max,x,y)来用draw函数表征一条线。这有功能吗?

然后,这个新的平均值线必须在一个我可以进行三角测量的数组中。 np.array []

在我之前的代码中,我尝试了一些过滤器。不幸的是,我没有达到我想象的结果。哪种过滤器最好?如何在白色上超过某个阈值?如何制作不应该存在的黑色像素?我有什么问题?我出错了吗?请帮助我,对每一项贡献我都会非常高兴。

谢谢Daniel

我的代码:

import cv2
import numpy as np
import matplotlib.pyplot as plt


Img1=cv2.imread('/home/pi/Desktop/6.jpg',0)   
Img1=cv2.resize(Img1,(0,0),fx=0.5,fy=0.5)

#Thresh-Binär
retval,th1=cv2.threshold(Img1,30,255,cv2.THRESH_BINARY)

#Thres- Otsu
retval2,th2=cv2.threshold(Img1,30,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

#Thresh-Adaptive+Gauss
th3=cv2.adaptiveThreshold(Img1,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, \
                      cv2.THRESH_BINARY,3,2)
#Gauss 
blur=cv2.GaussianBlur(Img1,(5,0),4)
blur2=cv2.GaussianBlur(th1,(5,5),0)


kernel=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(10,10))
skinmask=cv2.erode(Img1,kernel,iterations=3)
skinmask=cv2.dilate(Img1,kernel,iterations=3)
skinmask=cv2.GaussianBlur(skinmask,(3,3),1)
#Morpholo Filter/noise removal
kernel1 = np.ones((3,2),np.uint8) #np.unit=unsigned interger(0-255)
opening = cv2.morphologyEx(blur,cv2.MORPH_OPEN,kernel, iterations = 2)

#Contour finder
im2,contours,hierarchy=cv2.findContours(skinmask,cv2.RETR_TREE,cv2.CHAIN_APPRO    X_SIMPLE)

#kanten = cv2.Canny(opening,100,50)

#draw Contours
cnt=contours[0]
M=cv2.moments(cnt) #??
print(M)
Kontur=cv2.drawContours(Img1,contours,0,(255,255,255),5)
perimeter=cv2.arcLength(cnt,True)


cv2.imshow('Original',Img1)
cv2.imshow('Tresh',th1)
cv2.imshow('Tresh+Otsu',th2)
#cv2.imshow('TreshAdaptiv+Gauss',th3)
cv2.imshow('Kontur',Kontur)
#cv2.imshow('Tresh+Gaussian',blur2)
cv2.imshow('arc',perimeter)
cv2.imshow('Morph',opening)
cv2.imshow('skin',skinmask)

cv2.waitKey(0)     
cv2.destroyAllWindows()
print(len(contours))

编辑28.05.2017

Example

0 个答案:

没有答案