gpt4 book ai didi

c++ - 在 OpenCV 中创建矩阵后调整其大小

转载 作者:可可西里 更新时间:2023-11-01 14:58:23 27 4
gpt4 key购买 nike

我是 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 文档:

Scaling is just resizing of the image. OpenCV comes with a function cv2.resize() for this purpose. The size of the image can be specified manually, or you can specify the scaling factor. Different interpolation methods are used. Preferable interpolation methods are cv2.INTER_AREA for shrinking and cv2.INTER_CUBIC (slow) & cv2.INTER_LINEAR for zooming. By default, interpolation method used is cv2.INTER_LINEAR for all resizing purposes. You can resize an input image either of following methods:

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);

关于c++ - 在 OpenCV 中创建矩阵后调整其大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533101/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com