Si crea dst
tappeto con le stesse dimensioni di src
. Anche quando si chiama resize
passate sia la dimensione di destinazione e fx/fy
fattori di scala, si dovrebbe passare qualcosa che uno:
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: dalla documentazione OpenCV
:
Scaling è solo il ridimensionamento dell'immagine . OpenCV viene fornito con una funzione cv2.resize() per questo scopo. La dimensione dell'immagine può essere specificata manualmente oppure è possibile specificare il fattore di scala. Vengono utilizzati diversi metodi di interpolazione . I metodi di interpolazione preferibili sono cv2.INTER_AREA per il restringimento e cv2.INTER_CUBIC (lento) & cv2.INTER_LINEAR per lo zoom. Per impostazione predefinita, il metodo di interpolazione utilizzato è cv2.INTER_LINEAR per tutti gli scopi di ridimensionamento. È possibile ridimensionare un'immagine in ingresso uno dei seguenti metodi:
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)
Inoltre Visual C++
, ho provato entrambi i metodi per contrazione e cv::INTER_AREA
opere significativamente più veloce di cv::INTER_CUBIC
(come detto da OpenCV
documentazione):
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);