DrawContours()不能正常工作opencv python

Nil*_*Nil 1 python opencv opencv-contour

我正在研究在opencv python中查找和绘制轮廓的示例.但是当我运行代码时,我看到的是一个没有绘制轮廓的黑暗窗口.我不知道我哪里错了.代码是:

import numpy as np
import cv2
im = cv2.imread('test.png')
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy =     cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
img=cv2.drawContours(image,contours,0,(0,255,0),3)
cv2.imshow('draw contours',img)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

test.png 只是黑色背景中的白色矩形.

任何帮助,将不胜感激.

编辑:我正在使用Opencv 3.0.0和Python 2.7

She*_*zod 8

只要确保image这里是 3 通道即可:

img = cv2.drawContours(image, contours, -1, (0, 255, 0), 3)
Run Code Online (Sandbox Code Playgroud)

检查图像形状:

print(image.shape)
# (400, 300)    -> Error
# (400, 300, 3) -> Works
Run Code Online (Sandbox Code Playgroud)


小智 6

我相信问题在于drawContours命令.按照目前的写法,图像目的地是imageimg.您还尝试将彩色框绘制到单个通道的8位图像上.此外,值得注意的是,该findContours函数在查找轮廓的过程中实际修改了输入图像,因此最好不要在以后的代码中使用该图像.

drawContours如果您打算对图像进行进一步分析,我还建议您创建一个新的图像副本以设置为该功能的目标,这样您就不会覆盖程序当前可以访问的唯一副本.

import numpy as np
import cv2

im = cv2.imread('test.png')
imCopy = im.copy()
imgray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
image, contours, hierarchy =  cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(imCopy,contours,-1,(0,255,0))
cv2.imshow('draw contours',imCopy)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

这两个快速修复工作对我来说是一个黑色正方形与白色背景的类似图像.