首页 文章

DrawContours()不能正常工作opencv python

提问于
浏览
1

我正在研究在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)

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

任何帮助,将不胜感激 .

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

1 回答

  • 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)
    

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

相关问题