当前位置:网站首页>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
边栏推荐
- DOM树jsjs特效代码
- ESP8266-Arduino编程实例-MLX90614红外测温传感器驱动
- 【repo】SyntaxError: invalid syntax
- 商业智能BI业务分析思维:供应链分析 - 什么是牛鞭效应(一)
- uniapp 获取cookie与携带cookie请求数据
- Spark: Cluster Computing with Working Sets
- Distributed database problem (1): data partition
- nodejs安装淘宝镜像(配置淘宝镜像)
- leetcode:80. 删除有序数组中的重复项 II
- pwnhome 个人博客快速索引(持续更新)
猜你喜欢

LeetCode50天刷题计划(Day 9—— 整数转罗马数字(20.40-22.10)

Timezone setting in MySQL

月薪12K,蝶变向新勇往直前,我通过转行软件测试实现月薪翻倍...

信息录入率百分百上海强化施工现场建筑工人实名制管理

Meeting OA project (6) --- (to-be-opened meeting, historical meeting, all meetings)

String comparison size in MySQL (date string comparison problem)

Stored procedures in MySQL (detailed)

hzero-resource秒退

未来小间距竞争的着力点在哪里

MySQL:索引
随机推荐
MySQL:索引
ESP8266-Arduino编程实例-MLX90614红外测温传感器驱动
月薪12K,蝶变向新勇往直前,我通过转行软件测试实现月薪翻倍...
gconf/dconf实战编程(3)利用dconf库读写配置实战以及诸多配套工具演示
Range query based on date in MySQL
计算机系统与网络安全技术——第一章——信息安全概述——1.1-网络安全定义——什么是信息?
80篇国产数据库实操文档汇总(含TiDB、达梦、openGauss等)
高薪程序员&面试题精讲系列131之Eureka如何实现高可用?自我保护机制是怎么回事?
wordpress模板函数说明备注整理收藏
Bloom filter bloom
如何防止重复下单?
p5js炫酷网页流光动画
"Find nearby shops" | Geohash+MySQL realizes geographic location filtering
leetcode:80. 删除有序数组中的重复项 II
实习日报-2022-7-30
Spark: Cluster Computing with Working Sets
2.8K 120Hz触控双屏加持 灵耀X 双屏Pro 2022让办公无惧想象
30分钟成为Contributor|如何多方位参与OpenHarmony开源贡献?
Meeting OA project (6) --- (to-be-opened meeting, historical meeting, all meetings)
gconf/dconf实战编程(2)利用gconf库读写配置实战以及诸多配套工具演示