Python 围绕给定大小的区域轮廓绘制边界框

Python 围绕给定大小的区域轮廓绘制边界框,python,opencv,numpy,Python,Opencv,Numpy,我想在大于某个阈值的区域的每个闭合轮廓周围绘制一个边界框,而不仅仅是最大轮廓。我该怎么做呢? 到目前为止,我一直在尝试: contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) for c in contours: rect = cv2.boundingRect(c) if rect[2] < 100 or rect[3] < 100: continue pr

我想在大于某个阈值的区域的每个闭合轮廓周围绘制一个边界框,而不仅仅是最大轮廓。我该怎么做呢? 到目前为止,我一直在尝试:

contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
    rect = cv2.boundingRect(c)
    if rect[2] < 100 or rect[3] < 100: continue
    print cv2.contourArea(c)
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
cv2.putText(im,'Moth Detected',(x+w+10,y+h),0,0.3,(0,255,0))
cv2.imshow("Show",im)
cv2.waitKey()  
cv2.destroyAllWindows()      
等高线,=cv2.findContours(阈值、cv2.RETR_列表、cv2.CHAIN_近似值、简单值)
对于等高线中的c:
rect=cv2.boundingRect(c)
如果rect[2]<100或rect[3]<100:继续
打印cv2。轮廓区域(c)
x、 y,w,h=cv2.boundingRect(c)
cv2.矩形(im,(x,y),(x+w,y+h),(0255,0),2)
cv2.putText(im,'检测到蛾',(x+w+10,y+h),0,0.3,(0255,0))
cv2.imshow(“Show”,im)
cv2.waitKey()
cv2.destroyAllWindows()

记住,缩进级别在Python中很重要。还值得注意的是,您的代码不一定在最大轮廓周围绘制一个框,而是在
轮廓的最后一个元素周围绘制一个框。幸运的是,解决方法很简单。您只需要缩进对
cv2.rectangle()
cv2.putText()
的调用,以便它们在每次循环迭代中进行计算。您还可以通过将
rect
扩展为
x,y,w,h
来消除对
cv2.boundingRect()的调用。您的代码将是:

contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for c in contours:
    rect = cv2.boundingRect(c)
    if rect[2] < 100 or rect[3] < 100: continue
    print cv2.contourArea(c)
    x,y,w,h = rect
    cv2.rectangle(im,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.putText(im,'Moth Detected',(x+w+10,y+h),0,0.3,(0,255,0))
cv2.imshow("Show",im)
cv2.waitKey()  
cv2.destroyAllWindows()
等高线,=cv2.findContours(阈值、cv2.RETR_列表、cv2.CHAIN_近似值、简单值)
对于等高线中的c:
rect=cv2.boundingRect(c)
如果rect[2]<100或rect[3]<100:继续
打印cv2。轮廓区域(c)
x、 y,w,h=rect
cv2.矩形(im,(x,y),(x+w,y+h),(0255,0),2)
cv2.putText(im,'检测到蛾',(x+w+10,y+h),0,0.3,(0255,0))
cv2.imshow(“Show”,im)
cv2.waitKey()
cv2.destroyAllWindows()

我试图修复您的代码格式,但如果代码的含义发生了变化,请随意再次编辑,因为在Python中空格很重要。您能描述一下您遇到的问题吗?与您期望的相比,当前的行为是什么?我刚刚尝试了你的代码(后期编辑),它围绕多个轮廓绘制轮廓。嗨,奥雷利乌斯,谢谢你的编辑,现在它实际上可以工作了,缩进是个问题。如果你想增加投票,请重写为答案,我会增加投票。谢谢我已经回滚了我上次的编辑,因为它从根本上改变了你代码的性质。请参阅我的答案以获得有效版本。