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











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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一键制作主题激活码_idea2021永久激活注册码

    一键制作主题激活码_idea2021永久激活注册码Rider激活码最新破解教程,Mac版激活至2299年,Rider激活码2021.3.3

  • Java锁的分类_地锁怎么安装

    Java锁的分类_地锁怎么安装1.Java锁的种类在笔者面试过程时,经常会被问到各种各样的锁,如乐观锁、读写锁等等,非常繁多,在此做一个总结。介绍的内容如下:乐观锁/悲观锁独享锁/共享锁互斥锁/读写锁可重入锁公平锁/

  • java设置响应状态码

    java设置响应状态码1.各种状态码设置https://blog.csdn.net/daichangxia/article/details/781393242.设置状态码通过HttpServletResponse的方法进行返回相应的状态码,方法有如下:publicvoidsetStatus(intstatusCode)该方法设置一个任意的状态码。setStatus方法接受一个int(状态码)作为参数。如…

  • cocos2d-x精灵移动的方法

    cocos2d-x精灵移动的方法

    2021年11月30日
  • 列车调度问题PTA

    列车调度问题PTA7-20列车调度(25分)火车站的列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意一条轨道进入,最后从出口离开。在图中有9趟列车,在入口处按照{8,4,2,5,3,9,1,6,7}的顺序排队等待进入。如果要求它们必须按序号递减的顺序从出口离开,则至少需要多少条平行铁轨用于调度?输入格…

  • python数组操作备忘[通俗易懂]

    python数组操作备忘[通俗易懂]现有一段数组signalssignals[2:2,1]取值将为

发表回复

您的电子邮箱地址不会被公开。

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