drawContour 不适用于 OpenCV 3.4

drawContour doesn't work OpenCV 3.4

我非常努力地尝试在这张图片中找到轮廓:enter image description here

这是我的代码:

import numpy as np
import cv2
im = cv2.imread('test.jpg')

##imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
cv2.namedWindow('gray',cv2.WINDOW_NORMAL)
cv2.imshow('gray',im)
cv2.waitKey()
ret, thresh = cv2.threshold(imgray, 0, 255, 
 cv2.THRESH_BINARY+cv2.THRESH_OTSU)
_, contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, 
cv2.CHAIN_APPROX_NONE)

print ("number of countours detected before filtering %d -> "%len(contours))

new = np.zeros(im.shape)
new = cv2.drawContours(im,contours,-1,(0,0,255))

cv2.namedWindow('Display',cv2.WINDOW_NORMAL)
cv2.imshow('Display',new)
cv2.waitKey()

问题: 1. 生成的图像总是全黑,什么也没有显示,只是纯黑图像。通过我的描述你可以意识到我是图像处理的新手。我试图用红色显示 body 等高线,但什么也没有出现。

我正在使用 open cv 3.4.0 和 python 3.6

欢迎任何建议/解决方案,谢谢。

您必须使用 cv2.RETR_EXTERNAL,而不是使用 cv2.RETR_LIST

  • cv2.RETR_LIST 用于列出图像中的所有轮廓。
  • 有时在某些轮廓中可能会有轮廓。外面的叫parent,里面的叫child。当你只想要这些 parent 轮廓时使用 cv2.RETR_EXTERNAL.

您可以在 THIS LINK

上找到更多相关信息