当前位置:网站首页>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
边栏推荐
- 全网最全音视频媒体流
- Digicert EV证书签名后出现“证书对于请求用法无效”的解决方案
- ODrive开发 #1 ODrive固件开发指南[通俗易懂]
- 珠海市生物安全P3实验室主体结构封顶
- HDU 2602: Bone Collector ← 0-1背包问题
- untiy Resorces目录动态加载资源
- flink-sql 可以单独配置某个算子节点的并行度吗?
- 实习日报-2022-7-29
- 在网站页脚增加几只戏水的小鱼
- Zhaoqi Science and Technology Innovation Event Platform, Entrepreneurship Event Roadshow, Online Live Roadshow
猜你喜欢

ESP8266-Arduino编程实例-GA1A12S202对数刻度模拟光传感器

面试必问的HashCode技术内幕

珠海市生物安全P3实验室主体结构封顶

DOM系列之触屏事件

Range query based on date in MySQL

Next-ViT学习笔记

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

Stock Strategy 02 | Technology Timing + Industry Factors + Market Value Rotation

商业智能BI业务分析思维:供应链分析 - 什么是牛鞭效应(一)

Break the limit of file locks and use storage power to help enterprises grow new momentum
随机推荐
清华教授发文劝退读博:我见过太多博士生精神崩溃、心态失衡、身体垮掉、一事无成!...
Row locks in MySQL
Timezone setting in MySQL
2.8K 120Hz触控双屏加持 灵耀X 双屏Pro 2022让办公无惧想象
兆骑科创平台招才引智,海内外高层次人才引进平台
“查找附近的商铺”|Geohash+MySQL实现地理位置筛选
会议OA项目(六)--- (待开会议、历史会议、所有会议)
lombok builder重写
指针进阶(三)之指针与数组笔试题
南京科技大学、中国电子科技第28研究所等联合|MLRIP: Pre-training a military language representation model with informative factual knowledge and professional knowledge base(预训练具有丰富事实知识和专业知识库的军事语言表示模型)
蚂蚁首次披露核心基础软件技术开源版图
MySQL可以做多台vps的双向同步吗?
打破文件锁限制,以存储力量助力企业增长新动力
DOM树jsjs特效代码
链滴的几个 Markdown 语法没有渲染
测试工程师进阶必读书目
kubelet node pressure eviction
请问下怎么取数据库中上一个小时的数据到odps进行实时节点的同步呢
Chapter 13 Manually create a REST service (1)
月薪12K,蝶变向新勇往直前,我通过转行软件测试实现月薪翻倍...