【问题标题】:Why the mat type is different?为什么垫子类型不同?
【发布时间】:2014-02-25 19:33:14
【问题描述】:

我将图片加载到 original_pre,大小为 160x60,以下是代码

original_pre = cvLoadImage(input, 0);
int border = 5;
CvMat* original_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3);
original = cvCreateImage(cvSize(original_pre->width-2*border, original_pre->height-2*border), original_pre->depth, original_pre->nChannels);
cvGetSubRect(original_pre, original_mat, cvRect(border,border,original_pre->width-2*border,original_pre->height-2*border));

cvFloodFill(original_mat,cvPoint(0,0),cvScalarAll(0),cvScalarAll(1),cvScalarAll(1));
CvMat* original_open_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3);
CvMat* temp = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3);
cout<<original_mat->width<<" "<<original_mat->height<<" "<<original_open_mat->width<<" "<<original_open_mat->height<<" "<<CV_MAT_TYPE(original_mat->type)<<" "<<CV_MAT_TYPE(original_open_mat->type)<<" "<<CV_8UC3<<endl;
cvMorphologyEx(original_mat,original_open_mat,temp,NULL,CV_MOP_OPEN);

floodfill 操作后 original_mat 和 original_open_mat 的类型不同。 打印的结果是

150 50 150 50 0 16 16
OpenCV Error: Assertion failed (src.size() == dst.size() && src.type() == dst.type()) in cvMorphologyEx, file /home/ataosky/software/OpenCV-2.4.3/modules/imgproc/src/morph.cpp, line 1353

original_mat 的类型为 0,而 original_open_mat 的类型为 16。 为什么?

【问题讨论】:

    标签: c++ opencv image-processing computer-vision


    【解决方案1】:

    我用一个简单的图像运行你的代码,它工作得很好。这是代码和结果。我假设 original_preoriginal 属于 IplImage* 类型,因为它们不存在于您的代码块中。

    IplImage*   original_pre = cvLoadImage("G:\\test.png");
    int border = 5;
        CvMat* original_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3);
    IplImage* original = cvCreateImage(cvSize(original_pre->width-2*border, original_pre->height-2*border), original_pre->depth, original_pre->nChannels);
    cvGetSubRect(original_pre, original_mat, cvRect(border,border,original_pre->width- 2*border,original_pre->height-2*border));
    
    cvFloodFill(original_mat,cvPoint(50,55),cvScalarAll(255),cvScalarAll(0),cvScalarAll(0));
    CvMat* original_open_mat = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border, CV_8UC3);
    CvMat* temp = cvCreateMat(original_pre->height-2*border, original_pre->width-2*border,  CV_8UC3);
    cout<<original_mat->width<<" "<<original_mat->height<<" "<<original_open_mat->width<<" "<<original_open_mat->height<<" "<<CV_MAT_TYPE(original_mat->type)<<" "<<CV_MAT_TYPE(original_open_mat->type)<<" "<<CV_8UC3<<endl;
    cvMorphologyEx(original_mat,original_open_mat,temp,NULL,CV_MOP_OPEN);
    cvSaveImage("G:\\temp_.jpg",original_open_mat);
    

    原图

    结果

    【讨论】:

      猜你喜欢
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 2021-02-07
      • 2022-01-04
      • 2023-01-17
      • 2020-12-29
      相关资源
      最近更新 更多