OpenCV学习笔记:resize函数改变图像的大小

OpenCV提供了resize函数来改变图像的大小,函数原型如下:void resize(InputArray src,OutputArray dst,Size dsize,double fx=0,double fy=0,int interpolation=INTER_LINEAR );先解释一下各个参数的意思:src:输入,原图像,即待改变大小的图像

大家好,又见面了,我是你们的朋友全栈君。

OpenCV提供了resize函数来改变图像的大小,函数原型如下:

void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR );

先解释一下各个参数的意思:

src:输入,原图像,即待改变大小的图像;

dst:输出,改变大小之后的图像,这个图像和原图像具有相同的内容,只是大小和原图像不一样而已;

dsize:输出图像的大小。如果这个参数不为0,那么就代表将原图像缩放到这个Size(width,height)指定的大小;如果这个参数为0,那么原图像缩放之后的大小就要通过下面的公式来计算:

dsize = Size(round(fx*src.cols), round(fy*src.rows))

其中,fx和fy就是下面要说的两个参数,是图像width方向和height方向的缩放比例。

fx:width方向的缩放比例,如果它是0,那么它就会按照(double)dsize.width/src.cols来计算;

fy:height方向的缩放比例,如果它是0,那么它就会按照(double)dsize.height/src.rows来计算;

interpolation:这个是指定插值的方式,图像缩放之后,肯定像素要进行重新计算的,就靠这个参数来指定重新计算像素的方式,有以下几种:

  • INTER_NEAREST – 最邻近插值
  • INTER_LINEAR – 双线性插值,如果最后一个参数你不指定,默认使用这种方法
  • INTER_AREA – resampling using pixel area relation. It may be a preferred method for image decimation, as it gives moire’-free results. But when the image is zoomed, it is similar to the INTER_NEAREST method.
  • INTER_CUBIC – 4×4像素邻域内的双立方插值
  • INTER_LANCZOS4 – 8×8像素邻域内的Lanczos插值

使用注意事项:

1. dsize和fx/fy不能同时为0,要么你就指定好dsize的值,让fx和fy空置直接使用默认值,就像

resize(img, imgDst, Size(30,30));

要么你就让dsize为0,指定好fx和fy的值,比如fx=fy=0.5,那么就相当于把原图两个方向缩小一倍!


2. 至于最后的插值方法,正常情况下使用默认的双线性插值就够用了。

几种常用方法的效率是:最邻近插值>双线性插值>双立方插值>Lanczos插值;

但是效率和效果成反比,所以根据自己的情况酌情使用。


3. 正常情况下,在使用之前dst图像的大小和类型都是不知道的,类型从src图像继承而来,大小也是从原图像根据参数计算出来。但是如果你事先已经指定好dst图像的大小,那么你可以通过下面这种方式来调用函数:

resize(src, dst, dst.size(), 0, 0, interpolation);











版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126726.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • BurpSuite系列(五)—-Intruder模块(暴力激活成功教程)「建议收藏」

    BurpSuite系列(五)—-Intruder模块(暴力激活成功教程)「建议收藏」一、简介BurpIntruder是一个强大的工具,用于自动对Web应用程序自定义的攻击,BurpIntruder是高度可配置的,并被用来在广范围内进行自动化攻击。你可以使用BurpIntruder方便地执行许多任务,包括枚举标识符,获取有用数据,漏洞模糊测试。合适的攻击类型取决于应用程序的情况,可能包括:缺陷测试:SQL注入,跨站点脚本,缓冲区溢出,路径遍历;暴力攻击认证

    2022年7月12日
    72
  • vue 关闭vue项目中烦死人的ESlint[通俗易懂]

    vue 关闭vue项目中烦死人的ESlint[通俗易懂]【已解决】vue关闭vue项目中烦死人的ESlint很多时候,因为一些书写问题,ESlint会报错。

    2022年6月12日
    39
  • 数据分析方法论和数据分析方法的区别(数据分析理论)

    如何理解数据分析的方法论问题?首先,数据分析方法论就如同国家的方针政策,指导和决策我们分析的方向。从宏观角度知道如何进行数据分析,就像是一个数据分析的前期规划,知道着后期数据分析工作的开展。数据分析法则就是指具体的分析方法,例如我们常见的对比分析、交叉分析、相关性分析、回归分析、聚类分析等数据分析法,数据分析法则是从微观角度指导我们如何进行数据分析。那么,数据分析方法论的作用有什么呢?…

    2022年4月15日
    40
  • Git删除本地分支_idea删除git分支

    Git删除本地分支_idea删除git分支引言:注:本人一直都是用的gitbash窗口完成日常的开发工作。事情是这样的,切换分支的时候命令打错了,gitcheckout后面没有跟分支名,结果gitstatus,很多delete的文件,直接冒冷汗,gitadd,commit之后发现本地与远程确实是删除了很多文件,我本地没有修改的代码,于是选择直接删除本地的分支,然后重新从远程拉分支。具体操作:我现在在dev20181018分支…

    2022年10月16日
    7
  • 新建移动apn让网速变快(移动apn接入点哪个快)

    4G网络可以给我们带来畅快的网速体验,其实我们目前使用的LTE网络根据网速还分为多个标准,标准对4G网络的支持也不太一样,但是有时我们任然可以感觉到在有4G基站的地方上网网速也不是那么的满意,这是怎么回事儿呢?TD-LTE和FDD-LTE尽管被宣传为4G无线标准,但它其实并未被3GPP认可为国际电信联盟所描述的下一代无线通讯标准IMT-Advanced,因此在严格意义上其还未达到4G的标准。APN…

    2022年4月12日
    159
  • 以管理员身份运行IJ

    以管理员身份运行IJ

    2022年6月27日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号