16

バイナリイメージでfindContoursを実行しようとしています」

Mat conv(image.size(), CV_8U);
image.convertTo(conv, CV_8U);
vector<vector<cv::Point> > contours;

findContours(conv, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

エラーをスローします:

OpenCV Error: Unsupported format or combination of formats ([Start]FindContours support only 8uC1 images) in cvStartFindContours, 

何か案は?ありがとう

4

1 に答える 1

23

ドキュメントから:

C ++:void Mat :: convertTo(OutputArray m、int rtype、double alpha = 1、double beta = 0)const
パラメーター:

rtype –必要な出力行列タイプ、またはチャネル数が入力と同じであるための深さ。rtypeが負の場合、出力行列は入力と同じ型になります。

チャネルの数がによって変更されていないことがわかりますconvertTo。これは、おそらく3つのチャネル(r、g、およびb)を取得することを意味します。ただしfindContours、モノクロ画像が必要です。

画像を白黒に変換する必要があります。

cv::Mat bwImage;
cv::cvtColor(image, bwImage, CV_RGB2GRAY);
vector< vector<cv::Point> > contours;
cv::findContours(bwImage, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);
于 2012-11-02T22:46:50.507 に答える