首页 文章

无法在OpenCV(Python)中显示轮廓周围的边界矩形

提问于
浏览
2

我已经编写了这个代码来绘制在图像中绘制的轮廓周围的矩形框,但是在运行时,除了框之外,我得到的一切都是正确的,我完全看不到 . 什么是错误?

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

EDIT: 我尝试迭代每个轮廓并为了检查它我修改了代码如下:

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)值,并为每个轮廓放置文本“worm”,并在每个轮廓周围绘制矩形框 . 但是我只得到1输出:

Output for edited code

对于像这样的图像:

Source Image

我需要在每个类似蠕虫的生物上显示文本“蠕虫” . 但是我只得到它一次 . 有什么问题?

2 回答

  • 2

    我曾经使用下面的代码在检测到的轮廓上绘制矩形 . 希望能帮助到你 .

    for contour in contours:
        # get rectangle bounding contour
        [x,y,w,h] = cv2.boundingRect(contour)
    
        # draw rectangle around contour on original image
        cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,255),2)
    
  • 0

    只需写:

    for c in contours:
        (x,y,w,h) = cv2.boundingRect(c);
        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);
    
    cv2.drawContours(im2, contours, -1, (255,255,255), 2);   
    cv2.imshow("Contours",im2);
    

    正如 furas 所建议的那样,如果层次结构只有一个,则zip(轮廓,层次结构)将只返回一对 . 在这种情况下, contours 列表上的简单循环有效 .

相关问题