サンプルコードには載っていないが、もちろん二値化画像で検出した点全てを使用した楕円フィッティングが可能。cvMemStorageとcvSeqを点列用に適切に初期化した後、一気に Push してcvFitEllipse2に送り込んで終了。
悔しいが、DirectShow で自力で組んでいた物より遙かに高速だ。こういうのがネット上にごろごろしているのは、今時のプログラマ初心者にとっては、自信を持てなくなるという意味で不幸なことだ。
for(int i=0; i < binbuf->width * binbuf->height; i++)
{
if( binbuf->imageData[i] != 0 )
{
CvPoint p;
p.x = i % binbuf->width;
p.y = i / binbuf->width;
cvSeqPush( EdgeSeq, &p );
}
}
ellipse = cvFitEllipse2( EdgeSeq );