【发布时间】: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