OpenCV 图形API(78)图像与通道拼接函数-----调整图像大小的函数resize()

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

调整图像大小。

该函数将图像 src 缩小或放大到指定的尺寸。

输出图像的大小将是 dsize(当 dsize 非零时),或者根据 src.size()、fx 和 fy 计算得出。输出图像的深度与输入图像相同。

如果你想将 src 调整为适配一个已经创建好的 dst 图像,你可以这样调用函数:

cpp 复制代码
// 明确指定 dsize = dst.size(); fx 和 fy 将基于此计算。
resize(src, dst, dst.size(), 0, 0, interpolation);

如果你想在每个方向上以因子 2 来缩小图像,你可以这样调用:

cpp 复制代码
// 指定 fx 和 fy,让函数自动计算目标图像的尺寸。
resize(src, dst, Size(), 0.5, 0.5, interpolation);

一般来说,缩小图像时使用 cv::INTER_AREA 插值效果最好;而放大图像时通常推荐使用 cv::INTER_CUBIC(质量高但较慢)或 cv::INTER_LINEAR(较快,效果也还可以)。
注意事项:

函数的文本 ID 是 "org.opencv.imgproc.transform.resize"。

函数原型

cpp 复制代码
GMat cv::gapi::resize 
(
 	const GMat &  	src,
	const Size &  	dsize,
	double  	fx = 0,
	double  	fy = 0,
	int  	interpolation = INTER_LINEAR 
) 		

参数

  • 参数 src:输入图像。

  • 参数 dsize:输出图像的尺寸;如果为零,则根据 fx 和 fy 计算得出:
    dsize = Size(round(fx*src.cols), round(fy*src.rows)) \texttt{dsize = Size(round(fx*src.cols), round(fy*src.rows))} dsize = Size(round(fx*src.cols), round(fy*src.rows))

    dsize 必须非零,或者 fx 和 fy 都必须非零。

  • fx:水平方向上的缩放因子;当为 0 时,将根据 dsize.width / src.cols 自动计算:
    (double)dsize.width/src.cols \texttt{(double)dsize.width/src.cols} (double)dsize.width/src.cols

  • fy:垂直方向上的缩放因子;当为 0 时,将根据 dsize.height / src.rows 自动计算:
    (double)dsize.height/src.rows \texttt{(double)dsize.height/src.rows} (double)dsize.height/src.rows

  • interpolation:插值方法,详见 cv::InterpolationFlags(例如 INTER_NEAREST, INTER_LINEAR, INTER_CUBIC, INTER_AREA 等)。

代码示例

cpp 复制代码
include <opencv2/gapi.hpp>
#include <opencv2/gapi/core.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace cv::gapi;

int main()
{
    // 加载图像
    Mat src = imread( "/media/dingxin/data/study/OpenCV/sources/images/Lenna.png" );
    if ( src.empty() )
    {
        std::cerr << "无法加载图像!" << std::endl;
        return -1;
    }

    // 定义新的尺寸
    Size new_size( 320, 240 );  // 或者你可以设置为 (0, 0) 并使用 fx 和 fy

    // 创建一个 GComputation 对象来定义操作
    GMat in;
    GMat out = gapi::resize( in, new_size );

    // 执行操作
    Mat dst;
    GComputation resize_comp( GIn( in ), GOut( out ) );
    resize_comp.apply( gin( src ), gout( dst ) );

    // 显示结果
    imshow( "原始图像", src );
    imshow( "调整大小后的图像", dst );
    waitKey();

    return 0;
}

运行结果

相关推荐
程序员正茂14 小时前
Android studio中初步使用OpenCV库
android·opencv
小保CPP1 天前
OpenCV C++将多张图像合并为webp动图
c++·人工智能·opencv·计算机视觉
小保CPP1 天前
OpenCV C++提取webp动图里的图片
c++·人工智能·opencv·计算机视觉
深度研习笔记2 天前
OpenCV工业视觉实战11|多线程解耦+视频流稳流+推理加速,彻底解决卡顿阻塞,实现毫秒级工业实时检测
人工智能·opencv·计算机视觉
深度研习笔记2 天前
OpenCV工业视觉进阶14|SQLite违规数据库存储+历史记录查询+Excel报表导出,完成项目商用数据闭环(验收必备)
数据库·opencv·sqlite
C++ 老炮儿的技术栈2 天前
OpenCV 实现社保卡透视矫正:Hough 直线提取四角并转正证件图像
c语言·c++·人工智能·opencv·算法·计算机视觉·c
深度研习笔记3 天前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
深度研习笔记3 天前
OpenCV工业视觉实战06|ROI区域截取+局部精细化检测,锁定作业区域、屏蔽无效背景,大幅提升YOLO检测准确率
人工智能·opencv·yolo
fai厅的秃头姐!3 天前
OpenCV-基础篇
人工智能·opencv·计算机视觉
丨白色风车丨3 天前
OpenCV 基于 HSV 颜色空间实时颜色分割(摄像头蓝色识别)
人工智能·opencv·计算机视觉·hsv颜色识别·python计算机视觉