1

私は Code::Blocks で C の OpenCV 2.4.11 を使用しています。特に、O'Reilly の本 Learning OpenCV を使用しています。流域アルゴリズムのセクションは少し短かったので、少し遊んで、正確にどのように機能するかを確認してみようと思いました。ただし、関数を呼び出すたびに、次のエラーが発生します。

OpenCV エラー: cvWatershed でサポートされていない形式または形式の組み合わせ (32 ビット、1 チャネルの出力画像のみがサポートされています)

これまでの私のプログラムは非常に単純です。

int main(int arg, int arg2) {
//open windows
cvNamedWindow("Input", 1 );
cvNamedWindow("Markings", 1 );

//load images
IplImage* input = cvLoadImage("ActualDoorPhoto.jpg", CV_LOAD_IMAGE_COLOR);
assert(input != NULL);

IplImage* markingstemp = cvLoadImage("ActualMarkingTest.jpg", CV_LOAD_IMAGE_COLOR);
assert(markingstemp != NULL);

//prepare markings
IplImage* markings = cvCreateImage(cvGetSize(markingstemp), 32, 1);
CvMat* markmat = cvCreateMat(input->width, input->height, CV_32FC1);

cvWatershed(input, markmat);

cvShowImage("Input", input);
cvShowImage("Markings", markings);
cvWaitKey(0);

return 0;
}

cvWatershed の 2 番目の引数として、マーキングとマークマットの両方、および他のいくつかのもの (特に、マーキングステンプの輪郭が描かれたマーキング) を入れようとしましたが、毎回同じエラーが発生します。誰が私が間違っているのか教えてもらえますか?

4

1 に答える 1

1

出力行列の次元を反転しています。そのはず:

CvMat* markmat = cvCreateMat(input->height, input->width, CV_32FC1);

フォーマットもおそらく に変更する必要がありますCV_32SC1

于 2015-11-24T15:34:33.913 に答える