您创建了与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 (slow) &
cv2.INTER_LINEAR 用于缩放。默认情况下,使用的插值方法是
cv2.INTER_LINEAR 用于所有调整大小的目的。您可以调整输入的大小
image 以下方法之一:
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);