2013-07-08 295 views
6

我是OpenCV的新手,我正在尋找邊緣檢測的Canny教程。 我正在尋找如何調整剛剛創建的mat。該代碼是這樣的:在OpenCV中創建矩陣後調整矩陣的大小

src = imread(impath); 
... 
dst.create(src.size(), src.type()); 

現在我試圖調整與此墊:

resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC); 

但它似乎並不改變任何東西。

我的疑惑是兩個: :我做以及調用create()resize()? :如何指定mat的尺寸?

目標是調整圖像大小,如果創建dst墊具有相同尺寸src,目前還不清楚

回答

17

。此外,當你調用resize你通過這兩個目標的大小和fx/fy規模因素的影響,你應該通過東西之一:

Mat src = imread(...); 
Mat dst; 
resize(src, dst, Size(), 2, 2, INTER_CUBIC); // upscale 2x 
// or 
resize(src, dst, Size(1024, 768), 0, 0, INTER_CUBIC); // resize to 1024x768 resolution 

UPDATE:OpenCV文檔:

縮放只是調整圖像的。 OpenCV爲此提供了函數 cv2.resize()。手動指定圖像的大小 ,或者您可以指定比例因子。使用不同的插值方法。優選的插值方法是 用於縮小的cv2.INTER_AREA和用於縮小的cv2.INTER_CUBIC(慢)& cv2.INTER_LINEAR。默認情況下,對於所有調整大小的目的,使用的插值方法是 cv2.INTER_LINEAR。您可以調整任一下列方法輸入 圖像:

import cv2 
import numpy as np 
img = cv2.imread('messi5.jpg') 
res = cv2.resize(img,None,fx=2, fy=2, interpolation = cv2.INTER_CUBIC) 
#OR 
height, width = img.shape[:2] 
res = cv2.resize(img,(2*width, 2*height), interpolation = cv2.INTER_CUBIC) 

此外,在Visual C++,我嘗試了二者收縮之後方法和cv::INTER_AREA作品顯著快於cv::INTER_CUBIC(由OpenCV文檔中提到):

cv::Mat img_dst; 
cv::resize(img, img_dst, cv::Size(640, 480), 0, 0, cv::INTER_AREA); 
cv::namedWindow("Contours", CV_WINDOW_AUTOSIZE); 
cv::imshow("Contours", img_dst);