【发布时间】:2012-12-14 16:24:28
【问题描述】:
我尝试在二进制图像中查找轮廓,但是当尝试执行 cvFindContours 时,它给了我错误消息
Traceback(最近一次调用最后一次):文件“convert.py”,第 30 行,在 轮廓= cvFindContours(img2,存储,cv.CV_RETR_CCOMP,cv.CV_CHAIN_APPROX_SIMPLE)文件 “/usr/lib/pymodules/python2.7/opencv/cv.py”,第 580 行,在 cvFindContours 计数,序列 = cvFindContoursUntyped(*args)文件“/usr/lib/pymodules/python2.7/opencv/cv.py”,第 6521 行,在 cvFindContoursUntyped 返回 _cv.cvFindContoursUntyped(*args) 运行时错误:openCV 错误: 状态=输入数组的大小不正确 函数名=cvStartFindContours 错误信息= 文件名=/build/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)
我的原始和二值图像
原图 http://tinypic.com/r/34rul9x/6
和蓝色过滤二值图像 http://tinypic.com/r/ifbotx/6
【问题讨论】:
-
如果该错误消息是完整的,那么它什么也没说(为什么输入数组的大小不正确?)。只需将您的导入更改为
from cv import *,并从函数名称和常量中删除前缀“cv”,该示例就可以工作。如果我在具有多个通道的图像上强制使用FindContours,那么我得到:cv2.error: [Start]FindContours support only 8uC1 and 32sC1 images。如果 OpenCV 仍然支持您使用的 API,请填写错误报告。
标签: python image-processing opencv