2013-07-08 221 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);