【发布时间】:2017-05-23 09:49:59
【问题描述】:
我已经编写了这段代码来在图像中绘制的轮廓周围绘制矩形框,但是在运行时,除了我根本看不到的框之外,我得到了所有正确的东西。什么错误?
for cnt,heir in zip(contours, hierarchy):
(x,y,w,h) = cv2.boundingRect(cnt);
cv2.rectangle(im2,(x,y),(x+w,y+h),(0,255,0),2)
cv2.drawContours(im2, contours, -1, (255,255,255), 2);
cv2.imshow("Contours",im2);
PS。我使用 OpenCV 3.1.0 和 Python 2.7
编辑:我尝试遍历每个轮廓,为了检查它,我修改了代码如下:
for cnt,heir in zip(contours, hierarchy):
print ('Contour Area:',cv2.contourArea(cnt));
(x,y,w,h) = cv2.boundingRect(cnt);
print (x,y,h,w)
cv2.putText(im2,'worm',(x+w,y+h), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255,255,255), 2, cv2.LINE_AA);
cv2.rectangle(im2,(x,y),(x+w,y+h),(255,0,0),2);
我打印了每个轮廓的区域,每个轮廓的 (x,y,w,h) 值,并为每个轮廓放置文本“蠕虫”,并在每个轮廓周围绘制矩形框。但是我只得到 1 个输出:
对于像这样的图像:
我需要在每个类似蠕虫的生物上显示文本“蠕虫”。但是我只得到它一次。有什么问题?
【问题讨论】:
-
使用
print()查看变量中的内容(即print(contours))以及执行了哪部分代码(即print("I'm inside for-loop"))。也许 OpenCV 返回带有contours的空列表 BTW:OpenCV if can't do something 不会引发错误但返回None并且您不知道有问题。 -
stackoverflow.com/questions/22137511/… - 他们使用不同的颜色,因为
(0,255,0)在他们的图像上是不可见的。 -
@furas 这就是我得到的:i.imgur.com/dSS3YRy.png - 包含一些数字的非常大的嵌套数组列表。另外,我换了颜色,不行!
-
你检查过
(x,y,w,h)中的内容吗?也许你有w=0, h=0 -
你能上传你正在使用的图片吗?你想检测什么?
标签: python opencv image-processing bounding-box opencv-contour