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

18

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

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

现在我尝试使用以下方法调整mat的大小:

now I tried to resize the mat with this:

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

但这似乎没有改变什么。

我的疑问有两个: 1: 在调用create()之后是否适当地调用了resize()2: 我怎样才能指定mat的尺寸?

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

1个回答

36

你需要创建一个与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_AREAcv :: 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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接