【问题标题】:drawContour doesn't work OpenCV 3.4drawContour 不起作用 OpenCV 3.4
【发布时间】:2018-04-18 12:58:39
【问题描述】:

我正在努力寻找这张图片中的轮廓: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. 生成的图像总是全黑的,它从不显示任何东西,只是纯黑色的图像。根据我的描述,您可以意识到我是图像处理的新手。我正在尝试以红色显示身体轮廓,但没有出现。

我正在使用 open cv 3.4.0 和 python 3.6

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

【问题讨论】:

  • 不回答,但我建议先使用floodfill 之类的东西来切出清晰的身体
  • 注释掉的cvtColor,根本不会运行。否则它会像我预期的那样工作,找到大约 1500 个轮廓,其中一个是那个人的轮廓。其余的要么是噪声,要么是内部轮廓,因为您只使用了cv2.RETR_LIST,并且不对输出进行任何过滤。
  • @DanMašek,嗨,test.jpg 图像是灰度 1 通道图像。以前它是彩色图像,但由于我从外部操作将其更改为灰度,因此我注释掉了该行。你是对的,我有1700个轮廓,我只想要最大的轮廓,整个身体轮廓。感谢您的 hlp 和 lookign 的建议。
  • @MonirulIslam 改用cv2.RETR_EXTERNAL
  • @JeruLuke,这行得通!太感谢了!。我如何接受这个作为答案?

标签: python opencv opencv3.0 opencv3.1 opencv-contour


【解决方案1】:

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

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

您可以在 THIS LINK 上找到更多相关信息

【讨论】:

  • 这解决了问题
猜你喜欢
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2013-11-03
  • 2015-02-01
  • 1970-01-01
相关资源
最近更新 更多