2017-03-06 77 views
2

我想调整我的图像下面的代码当图像是IplImage,但当我将其更改为Mat时我的图像下面的代码工作我得到这些错误: -Cannot convert'cv :: Mat: :深度'从'int(cv :: Mat ::)()const'类型输入'int'。 无法将'cv :: Mat'转换为'const CvArr * {aka const void *}'作为参数'1'到'void cvResize(const CvArr *,CvArr *,int)'。调整图像类型“Mat”opencv C++

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; 

有人能帮我吗?

回答

3

使用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函数,这通常不容易出错。

如果需要specifiy长宽比或不同的插值,见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)

+1

我会使用'cv :: IMREAD_GRAYSCALE'和'cv :: WINDOW_AUTOSIZE',以避免旧的C名称。其实,你甚至不需要'cv :: namedWindow'函数;) – Miki

+0

谢谢。它现在有效。 – azertq

0

您还可以使用如下代码:

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

waitKey();有助于形象留下来,等待响应。