调整图像类型“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_GRAYSCALE
和 cv::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图像中特定坐标的灰度值?