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 count、seq = cvFindContoursUntyped( *args ) ファイル "/usr/lib/pymodules/python2.7/opencv/cv.py"、6521 行目、cvFindContoursUntyped return _cv.cvFindContoursUntyped(* args) RuntimeError: 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

4

2 に答える 2

1

Python cv2で輪郭を見つける

    numpy を np としてインポート
    インポート cv2

    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 から廃止されたと思います。現在2つのAPIがありますが、古いものcv

>>> import cv2.cv as cv

そして、2番目の新しいものは次のように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

于 2012-12-30T03:06:48.100 に答える