在OpenCV中创建Matrix后调整其大小

ste*_*teo 12 c++ opencv image image-resizing

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

 src = imread( impath );
 ...
 dst.create( src.size(), src.type() );
Run Code Online (Sandbox Code Playgroud)

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

resize(dst, dst, dst.size(), 50, 50, INTER_CUBIC);
Run Code Online (Sandbox Code Playgroud)

但它似乎没有改变任何东西.

我的疑惑是两个: 1:我做以及调用resize()create()2:我如何指定尺寸mat

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

jet*_*t47 25

您创建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
Run Code Online (Sandbox Code Playgroud)

更新: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)
Run Code Online (Sandbox Code Playgroud)

此外,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);
Run Code Online (Sandbox Code Playgroud)