0

我尝试在二进制图像中查找轮廓,但是当尝试执行 cvFindContours 时,它给了我错误消息

回溯(最近一次调用最后):文件“convert.py”,第 30 行,轮廓 = cvFindContours(img2, storage, cv.CV_RETR_CCOMP, cv.CV_CHAIN_APPROX_SIMPLE) 文件“/usr/lib/pymodules/python2.7/opencv/ cv.py”,第 580 行,在 cvFindContours 计数中,seq = cvFindContoursUntyped( *args ) 文件“/usr/lib/pymodules/python2.7/opencv/cv.py”,第 6521 行,在 cvFindContoursUntyped 返回 _cv.cvFindContoursUntyped(* args) RuntimeError: openCV Error: Status=Incorrect size of input array function name=cvStartFindContours error message= file_name=/build/buildd/opencv-2.1.0/src/cv/cvcontours.cpp line=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

4

2 回答 2

1

在 python cv2 中查找轮廓

    将 numpy 导入为 np
    导入简历2

    img = cv2.imread('sample_image.jpg')
    imgray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    ret,thresh = cv2.threshold(imgray,127,255,0)
    _,轮廓,层次结构 = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

    cv2.drawContours(img, 轮廓, -1, (0,255,0), 3)
    cv2.imshow('img',img)
    cv2.waitKey(0)
于 2016-05-10T14:21:00.327 回答
0

我认为这种 API 风格已从 OpenCV 中终止。目前有两个 API,旧的一个是cv通过

>>> import cv2.cv as cv

第二个和新的是cv2可用的:

>>> import cv2

关于错误:

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

然后删除所有cv前缀,它应该可以正常工作。

笔记 :

我认为您正在尝试对物体进行颜色跟踪。

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

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

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

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

于 2012-12-30T03:06:48.100 回答