在OpenCV中创建矩阵后,调整矩阵大小

resize a Matrix after created it in OpenCV

本文关键字:调整 创建 OpenCV      更新时间:2023-10-16

我是OpenCV的新手,我正在学习边缘检测的Canny教程。我正在研究如何调整刚刚创建的mat的大小。代码是这样的:

 src = imread( impath );
 ...
 dst.create( src.size(), src.type() );

现在我试着用这个调整垫子的大小:

resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC);

但这似乎并没有改变任何事情。

我有两个疑虑:1:我在create()之后呼叫resize()做得好吗?2:如何指定mat的尺寸?

我的目标是调整图像大小,如果不清楚

创建与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)
#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);