你需要创建一个与src
大小相同的dst
矩阵。同时,在调用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
更新: 来自 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)
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);