2017-03-06 118 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();有助於形象留下來,等待響應。