0

私はオブジェクトのセグメンテーションを含むコンピューター画像処理プロジェクトに取り組んでおり、輪郭を見つけましたが、たとえば、最初のものだけを描画して、さらに色で塗りつぶしたいと考えています。残念ながら、次のエラーが発生し続けます: TypeError: Expected CvSeq for argument 'contour'.

エラーが発生するコードの一部を次に示します。

mem=cv.CreateMemStorage()
nc=cv.FindContours(img_th,mem,cv.CV_RETR_LIST,cv.CV_CHAIN_APPROX_SIMPLE,(0,0))  
c=nc[1]
cv.DrawContours(img_adth,c,cv.CV_RGB(255,0,0),cv.CV_RGB(0,255,0),2,2,-1) 
4

1 に答える 1

0

描画機能からエラーが発生しています。

私は opencv python API を使用したことはありませんが、C++ とは異なり、C および python API は輪郭を表すスタイルが異なると思います。

C++ では、輪郭 ID を選択して、その輪郭 ID のみを描画できます。すべての等高線を描きたい場合は、id = -1 と入力します。

C/Python では、ベクター内の輪郭を「ポイント」して、その輪郭のみを描画します。したがって、contours (nc) は最初の輪郭へのポインターです。すべての輪郭を描きたい場合は、while(contours != null) ループを使用します。

より明確にするために、私はあなたのコードをそのように変更しました。これを使用してみてください。私は静かではないので、これがうまくいくかどうか教えてください..

...
c = nc.next //until you select exact one
cv.DrawContours(img_adth,c,cv.CV_RGB(255,0,0),cv.CV_RGB(0,255,0),2,2,-1) 
于 2013-06-23T09:54:00.177 に答える