OpenCV:cvFindContours 正常に出来た

2017-07-30 :  PCクリニック
Python、C言語、Perl、グルコサミン、Firefox
以前(2017-07-21)の記事「GSL Shell/OpenCV 学習:cvFitEllipse2」以来、
原因が分からなかった、cvFindContoursの結果不正。

遂に、原因が判明した。

改めて、当該関数の定義を見直すと:
int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,
int header_size=sizeof(CvContour), int mode=CV_RETR_LIST,
int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) );
とある。
ここで、最後の7番目の引数に関しては、
  offset - Optional offset by which every contour point is shifted. ・・・
と(Optional)とあるので、省略していた。
しかし、5番目、6番目はデフォルトとかを指定していた。

つまり、7番目もデフォルト値を指定すべきだった。

と云うことで、完成したコード:
---- GSL Shell コード
cv2 = require'cv2'
ffi.cdef[[
/****************************/
/* 不足分の関数宣言を記述 */
/****************************/
]]
---- ・・・・・
img = cv2.cvLoadImageM( 'Threshold.tif', 0 ) -- CV_8UC1 入力
xx, yy = img.xx, img.yy

img2=cv2.cvCreateMat(yy,xx,16) -- CV_8UC3 領域
cv2.cvCvtColor( img, img2, 8 ) -- CV_GRAY2BGR BWからcolor

storage = cv2.cvCreateMemStorage( 0 )

contours=ffi.new('CvSeq*[1]'); P0=ffi.new('CvPoint', 0, 0 )

r = cv2.cvFindContours( img, storage, contours, 88, 3, 2, P0 )

it=ffi.new('CvTreeNodeIterator[1]')
cv2.cvInitTreeNodeIterator( it, contours[0], 3 )

while true do
cnt = ffi.cast( 'CvSeq*', cv2.cvNextTreeNode( it ) )
if cnt == nil then break end

ell = cv2.cvFitEllipse2( cnt )

P1=ffi.new('CvPoint'); S1=ffi.new('CvSize')
P1.x, P1.y = ell.x+0.5, ell.y+0.5
S1.xx, S1.yy = ell.xx/2+0.5, ell.yy/2+0.5
Sc1=ffi.new('CvScalar', 255,0,0,0) -- B:青

cv2.cvEllipse( img2, P1, S1, ell.angle, 0, 360, Sc1, 1, 8, 0 )
end

cv2.cvSaveImage( 'FitEllipse.tif', img2, 0 )
と云った感じ。

ここで、注意点

cvEllipseの第3引数、
即ち楕円のの指定は整数に成っている。
なので、四捨五入した方が宜しいようだ。


なお、
cvFitEllipse2の戻り構造体CvBox2Dの定義は、
<紙>流にしている。

要素の定義はフラットで、
{ x, y, xx, yy, angle }
最初の2つが中心、次の2つが径、最後が角度。


これで、やっと懸案事項が解決した。


本日はここまで。


Lua ( GSL Shell ) / OpenCV 学習は続く。


見ていただいた序でとは厚かましい限りですが、
お帰りに投票して頂けるとなお嬉しいです。 ⇒ blogram投票ボタン


170628
関連記事
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

おきてがみ/blogram
blogram投票ボタン



おきてがみ

最新記事
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
月別アーカイブ
カテゴリ
最新コメント
検索フォーム
リンク
プロフィール

<紙>

Author:<紙>
ようこそ。
「パソコンヲタクの雑記帳」
もろもろなことを綴っています。
パソコン ヲタクってねくら?
画像は kami でなく kani です。

カウンター(fc2、i2i) /Google Analytics


i2i(from 2010-08-24)
Total =
Today  =  
Yesterday=
アンチエイジング

Google Analytics
ブックマーク