调整图像类型“Mat”opencv C++的大小

Posted

技术标签:

【中文标题】调整图像类型“Mat”opencv C++的大小【英文标题】:Resize an image type "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;

有人可以帮我吗?

【问题讨论】:

【参考方案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(); 帮助图像停留并等待响应。

【讨论】:

以上是关于调整图像类型“Mat”opencv C++的大小的主要内容,如果未能解决你的问题,请参考以下文章

调整大小的 opencv 图像在 QWidget C++ 上未正确显示

C++的opencv里怎么读取Mat图像中特定坐标的灰度值?

使用 c++ 和 opencv 计算 Mat 的大小和方向时出错

《OpenCV:访问Mat图像中每个像素值》

OpenCV大型阵列类型Mat类

如何将 opencv Mat 类型传递给 Python 并返回一个数组?