我在C代码块上使用OpenCV 2.4.11,特别是通过O' Reilly书籍学习OpenCV。关于分水岭算法的部分有点短,所以我想我会稍微看一下它是如何工作的。但是,每次调用该函数时都会出现以下错误:
OpenCV错误:不支持的格式或格式组合(仅32位,1通道 在cvWatershed中支持el输出图像
到目前为止,我的计划很简单:
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的第二个参数,以及其他几个东西(特别是标记有标记的轮廓标记),但每次我都得到相同的错误。谁能告诉我我做错了什么?
答案 0 :(得分:1)
您正在反转输出矩阵的尺寸。它应该是:
CvMat* markmat = cvCreateMat(input->height, input->width, CV_32FC1);
格式也可能更改为CV_32SC1
。