图像处理- Python-OpenCv FindContours



我尝试在二进制图像中找到轮廓,但当尝试执行cvFindContours时,它会给我错误信息

Traceback(最近一次调用):文件"convert.py",第30行,in轮廓= cvFindContours(图像2,存储,cv。CV_RETR_CCOMP, cv_cv_chain_approx_simple)文件"/usr/lib/pymodules/python2.7/opencv/cv.py",第580行cvFindContours. count, seq = cvFindContoursUntyped(*args)文件"/usr/lib/pymodules/python2.7/opencv/cv.py",第6521行,incvFindContoursUntypedreturn _cv.cvFindContoursUntyped(*args) RuntimeError: openCV Error:状态=输入数组大小不正确函数名= cvStartFindContours错误消息=file_name =/构建/buildd opencv-2.1.0/src/cv/cvcontours.cpp行= 205

我使用新安装的Ubuntu 11.10和Opencv 2.3.1。

这是我的源代码

from opencv.cv import *
from opencv.highgui import *
image = cvLoadImage('test.png')
def getthresholdedimg(image):
    size = cvSize(640, 480)
    imghsv=cvCreateImage(cvGetSize(image),8,3)
    cvCvtColor(image,imghsv,cv.CV_BGR2HSV)
    imgblue=cvCreateImage(cvGetSize(image),8,1)
    imgblue2=cvCreateImage(cvGetSize(image),8,1)
    imgthreshold=cvCreateImage(cvGetSize(image),8,1)
    cvInRangeS(imghsv,cvScalar(100,100,100),cvScalar(120,255,255),imgblue)
    cvInRangeS(imghsv,cvScalar(100,100,100),cvScalar(120,255,255),imgblue2)
    cvAdd(imgblue,imgblue,imgthreshold)
    return imgthreshold

cvFlip(image,image,1)
cvSmooth(image, image, CV_GAUSSIAN, 3, 0)
imgthresh=getthresholdedimg(image)
cvErode(imgthresh,imgthresh,None,3)
cvDilate(imgthresh,imgthresh,None,10)
storage = cvCreateMemStorage(0)
img2=cvCloneImage(imgthresh)
contour = cvFindContours(img2, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE)

my original and binary image

原始图像http://tinypic.com/r/34rul9x/6

和蓝滤二值图像http://tinypic.com/r/ifbotx/6

在python cv2中查找轮廓

<>之前导入numpy为np进口cv2Img = cv2.imread('sample_image.jpg')imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)Ret,thresh = cv2.threshold(imgray,127,255,0)= cv2.findContours(threresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)cv2。drawContours(img, contours, -1, (0,255,0), 3)cv2.imshow (img, img)cv2.waitKey (0)

我认为这种风格的API已经从OpenCV中停止了。目前有两个API,旧的是

得到的cv
>>> import cv2.cv as cv

第二个也是新的是cv2,可作为:

>>> import cv2

关于错误:

将import语句替换为from cv2.cv import *

然后删除所有的cv前缀,它应该工作良好。

注意:

我想你是在尝试物体的颜色跟踪。

但是既然你有OpenCV 2.3.1,为什么你要使用非常旧的Python API呢?

新的Python API是cv2版本,简单,快速,灵活。此外,与新API相比,在旧API中很难处理各种对象。所以我建议你更新到新的cv2 API。在旧的API中甚至很难调试错误。

您可以在此链接中找到新的cv2 API的颜色跟踪代码:http://goo.gl/db2KW

或者如果您确定使用旧的API,下面是代码:http://goo.gl/AFEmv

相关内容

  • 没有找到相关文章

最新更新