我正在进行一个项目,跟踪一个激光器和一个光电二极管,该光电二极管的相机连接在树莓π上。pi将向arduino发送指令,arduino将重定向激光,直到我从光电二极管得到响应。现在,我正在研究这个过程的相机方面。
我试图找到我的图像的轮廓,这样我就可以将它们与我将要使用的对象的一般轮廓相匹配,但我的findContours()只给了我图像的边界。
我希望我能发布这些图片,但我没有足够的代表。Canny Edge是黑白的,黑底白线。上面有轮廓的图像是捕获的图像,但有绘制的边界,没有其他轮廓。
这是我的代码:
def DED(grayImg): #Edge Detection, returns image array
minInt, maxInt, minLoc, maxLoc = cv2.minMaxLoc(grayImg) #Grayscale: MinIntensity, Max, and locations
beam = cv2.mean(grayImg) #Find the mean intensity in the img pls.
mean = float(beam[0])
CannyOfTuna = cv2.Canny(grayImg, (mean + minInt)/2, (mean + maxInt)/2) #Finds edges using thresholding and the Canny Edge process.
return CannyOfTuna
def con2z(Gray, ogImage): #Find contours from = Canny Edge Image, draw onto original
lines, pyramids = cv2.findContours(Gray, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
gimmeGimme = cv2.drawContours(ogImage, lines, -1, (128,255,0), 3) #draw contours on
#The -1 signifies ALL contours will be drawn.
return lines
with picamera.PiCamera() as camera:
camera.resolution = (640,480)
out = camera.capture('output.jpg') # Camera start
output = cv2.imread('output.jpg')
grayput = cv2.cvtColor(output, cv2.COLOR_BGR2GRAY) #Grayscale
cv2.imwrite('gray.jpg', grayput)
cans = DED(grayput) #Canny Edge
cv2.imwrite('Canny.jpg', cans)
lines = con2z(grayput, output) # Contours please
print(lines)
cv2.imwrite('contours.jpg', output)
编辑:这是两张照片https://i.stack.imgur.com/Jd6o0.jpghttps://i.stack.imgur.com/mAy2d.jpg
findContours
返回此元组(图像、轮廓、层次结构)。因此,在您的情况下,尝试将其作为findContours
函数的L.H.S:_, lines, pyramids = cv2.findContours
编辑:
抱歉,这不是解决方案,下面的一个对我有效。
在con2z
函数调用中将grayput
替换为cans。findContours
期望二进制图像,而grayput
不是。