【问题标题】:Resize an image type "Mat" opencv C++调整图像类型“Mat”opencv C++的大小
【发布时间】:2017-03-06 12:25:31
【问题描述】:

我想调整我的图像大小,当图像是 IplImage 时,下面的代码可以工作,但是当我将它更改为 Mat 时,我得到了这些错误: - 无法将 'cv::Mat::depth' 从类型 'int (cv::Mat::)() const' 转换为类型 'int'。 - 不能将参数 '1' 的 'cv::Mat' 转换为 'const CvArr* {aka const void*}' 到 'void cvResize(const CvArr*, CvArr*, int)'。

 Mat image=imread("21.png", CV_LOAD_IMAGE_GRAYSCALE);
Mat dst;
dst= cvCreateImage(cvSize(150,150),image.depth,image.channels());
cvResize(image, dst);
namedWindow("Source", CV_WINDOW_AUTOSIZE );
imshow("Source", image);
namedWindow("resize", CV_WINDOW_AUTOSIZE );
imshow("resize", dst);
waitKey(0);
    return 0;

有人可以帮我吗?

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    使用 C++ API 语法(目前您使用的是 C api):

    cv::Mat image = cv::imread("21.png", CV_LOAD_IMAGE_GRAYSCALE);
    cv::Mat dst;
    cv::resize(image, dst, cv::Size(150,150));
    
    cv::namedWindow("Source", CV_WINDOW_AUTOSIZE );
    cv::imshow("Source", image);
    cv::namedWindow("resize", CV_WINDOW_AUTOSIZE );
    cv::imshow("resize", dst);
    waitKey(0);
    

    如果不需要,请不要再使用旧的 C api cvMethodname 函数。而是使用 cv::Methodname 函数,这些函数通常更不容易出错。

    如果您需要指定纵横比或不同的插值,请参阅http://docs.opencv.org/2.4/modules/imgproc/doc/geometric_transformations.html#void%20resize(InputArray%20src,%20OutputArray%20dst,%20Size%20dsize,%20double%20fx,%20double%20fy,%20int%20interpolation)

    【讨论】:

    • 我会使用 cv::IMREAD_GRAYSCALEcv::WINDOW_AUTOSIZE,以避免使用旧的 C 名称。实际上,你甚至不需要cv::namedWindow 函数;)
    【解决方案2】:

    您也可以使用下面给出的代码:

     Mat3b groupres;
     cvtColor(img, groupres, COLOR_GRAY2BGR);
     imshow("Grouped Result", groupres);
     Size size1(400, 450);
     resize(groupres, groupres, size1);
     waitKey();
    

    waitKey(); 帮助图像停留并等待响应。

    【讨论】:

      猜你喜欢
      • 2014-07-21
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多