当前位置:网站首页>OpenCV-resize函数「建议收藏」
OpenCV-resize函数「建议收藏」
2022-08-01 16:02:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
OpenCV提供了resize函数来改变图像的大小,函数原型如下:
/************************************************************************/
/*
OpenCV图像缩放使用的函数是:resize
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
参数含义:
InputArray src -原图像
OutputArray dst -输出图像
Size dsize -目标图像的大小
double fx=0 -在x轴上的缩放比例
double fy=0 -在y轴上的缩放比例
int interpolation -插值方式,有以下四种方式
INTER_NN -最近邻插值
INTER_LINEAR -双线性插值 (缺省使用)
INTER_AREA -使用象素关系重采样,当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NN 方法。
INTER_CUBIC -立方插值。
说明:dsize与fx和fy必须不能同时为零
*/
/************************************************************************/
参数说明:
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); 示例:
#include <opencv2\opencv.hpp>
#include <opencv2\imgproc\imgproc.hpp>
using namespace cv;
int main()
{
//读入图像
Mat srcImage=imread("..\\1.jpg");
Mat temImage,dstImage1,dstImage2;
temImage=srcImage;
//显示原图
imshow("原图",srcImage);
//尺寸调整
resize(temImage,dstImage1,Size(temImage.cols/2,temImage.rows/2),0,0,INTER_LINEAR);
resize(temImage,dstImage2,Size(temImage.cols*2,temImage.rows*2),0,0,INTER_LINEAR);
imshow("缩小",dstImage1);
imshow("放大",dstImage2);
waitKey();
return 0;
}
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/125859.html原文链接:https://javaforall.cn
边栏推荐
- 测试技术|白盒测试以及代码覆盖率实践
- Shell basic function writing
- 未来小间距竞争的着力点在哪里
- flink-sql 可以单独配置某个算子节点的并行度吗?
- mysql 面试题
- 数据抽取过滤的时候,数据库字段update_at类型是timestamp,抽取T-1日数据这个变量条
- 全网最全音视频媒体流
- DOM系列之classList属性
- 网站2D看板娘收集的可用的模型
- IronOS, an open source system for portable soldering irons, supports a variety of portable DC, QC, PD powered soldering irons, and supports all standard functions of smart soldering irons
猜你喜欢
指针进阶(二)
信息录入率百分百上海强化施工现场建筑工人实名制管理
IronOS, an open source system for portable soldering irons, supports a variety of portable DC, QC, PD powered soldering irons, and supports all standard functions of smart soldering irons
2.8K 120Hz触控双屏加持 灵耀X 双屏Pro 2022让办公无惧想象
蚂蚁首次披露核心基础软件技术开源版图
使用Canvas 实现手机端签名
Shell basic function writing
leetcode:33. 搜索旋转排序数组
Spark: Cluster Computing with Working Sets
强网杯2022 pwn 赛题解析——yakagame
随机推荐
ECCV 2022 | Poseur:你以为我是姿态估计,其实是目标检测哒
重庆银河证券股票开户安全吗,是正规的证券公司吗
兆骑科创科创赛事平台,创业赛事活动路演,线上直播路演
信息录入率百分百上海强化施工现场建筑工人实名制管理
火花:集群计算工作集
gconf/dconf实战编程(2)利用gconf库读写配置实战以及诸多配套工具演示
js to determine whether it is a pc or a mobile terminal (including ipad)
预定义和自定义
Flink - SQL can separate a certain parallelism of operator node configuration?
Break the limit of file locks and use storage power to help enterprises grow new momentum
pytorch中tensor转成图片保存
nodejs安装淘宝镜像(配置淘宝镜像)
uniapp 获取cookie与携带cookie请求数据
Spark: Cluster Computing with Working Sets
1个月写900多条用例,2线城市年薪33W+的测试经理能有多卷?
Convert tensor to image in pytorch
兆骑科创平台招才引智,海内外高层次人才引进平台
pytorch测试的时候为何要加上model.eval()?
给网站增加离开页面改变网站标题效果
DHCP配置命令(DHCP配置命令)