您创建dst
的垫子尺寸与src
. 此外,当您调用时,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)
#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);