OpenCV findContours 只查找图像的边框
Posted
技术标签:
【中文标题】OpenCV findContours 只查找图像的边框【英文标题】:OpenCV findContours only finds the border of the image 【发布时间】:2015-06-26 16:05:51 【问题描述】:我正在开展一个项目,以跟踪激光和光电二极管,并将摄像头连接到树莓派上。 pi 将向 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)
编辑:这是两张照片 http://imgur.com/EVeMVdm,QLoYa2o#0 http://imgur.com/EVeMVdm,QLoYa2o#1
【问题讨论】:
如果您在网上发布图片并在问题中添加链接,有人会为您添加图片。 【参考方案1】:findContours 返回此元组(图像、轮廓、层次结构)。 所以在你的情况下,试试这个作为你的 findContours 函数的 L.H.S:_, lines, pyramids = cv2.findContours
编辑: 抱歉,这不是解决方案,下面的一个对我有用。 在 con2z 函数调用中用罐头替换 grayput。 findContours 需要二值图像,而 grayput 不是。
【讨论】:
这是我最初的格式,但是当我有 3 个 LHS 术语时,我得到了错误:“ValueError: need more than 2 values to unpack” 啊,哎呀。感谢您发现我的错误!我本来打算使用 Canny Edge 图像以上是关于OpenCV findContours 只查找图像的边框的主要内容,如果未能解决你的问题,请参考以下文章
Android findContours 上的 OpenCV 抛出异常
为啥openCV中的输入图像findContours()要转灰度?
【python】opencv库中cv2.findContours()和cv2.drawContours()函数
为啥 opencv 中的 FindContours 函数会在如下图像中找到两个轮廓而不是一个?
OpenCV 2.4.2 findContours(),如何只得到直线轮廓
OpenCV计算机图像处理 —— 凸性缺陷 + 点多边形测试 + 形状匹配 + 轮廓分层与cv.findContours()