【问题标题】:cvWatershed unsupported format or combination of formatscvWatershed 不支持的格式或格式组合
【发布时间】:2015-11-24 23:34:33
【问题描述】:

我正在使用 C on Code::Blocks 中的 OpenCV 2.4.11,特别是通过 O'Reilly 的《Learning OpenCV》一书。关于分水岭算法的部分有点短,所以我想我会用它来看看它是如何工作的。但是,每次调用该函数时,都会出现以下错误:

OpenCV 错误:不支持的格式或格式组合(仅 32 位、1 通道 el 输出图像支持)在 cvWatershed

到目前为止,我的程序非常简单:

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;
}

我尝试将标记和 markmat 作为 cvWatershed 的第二个参数,以及其他一些东西(特别是标记上绘制有 markingstemp 的轮廓的标记),但每次我都会遇到同样的错误。谁能告诉我我做错了什么?

【问题讨论】:

  • 好的,我已经尝试过了,错误已更改为“OpenCV 错误:cvWatershed 中输入参数的大小不匹配(输入和输出图像必须具有相同的大小)”这似乎很奇怪因为一个人的大小是从另一个人身上得出的。有什么想法吗?
  • 您正在反转尺寸:CvMat* markmat = cvCreateMat(input->height, input->width, CV_32FC1); 格式可能也应该是 CV_32SC1
  • 哦,该死的,是的,那行得通。谢谢!现在似乎是一个愚蠢的问题。
  • 有什么办法可以删除这个问题,或者我应该尽可能添加答案吗?

标签: c opencv codeblocks watershed


【解决方案1】:

您正在反转输出矩阵的维度。应该是:

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

格式也应该改成CV_32SC1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多