OPENCV入门教程八:resize改变图像尺寸
来源:互联网 发布:欧普插线板 知乎 编辑:程序博客网 时间:2024/05/17 01:37
一、目标
学习使用resize函数改变图像的尺寸。
二、函数说明
函数原型:
void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )
src源图像
dst目标图像
dsize目标图像的大小
各个参数的意义比较直观,但是需要注意的是dsize与fx和fy必须不能同时为零,也就是说要么dsize不为零而fx与fy同时可以为0,要么dsize为0而fx与fy不同时为0;resize函数的目标大小可以是任意的大小,可以不保持长宽比率,删除的像素或者新增的像素值通过interpolation(内插)控制;
fx,fy分别指水平和垂直方向的比率;如果dsize 为零,则目标图像的大小是通过这两个参数来计算的:目标图像的宽度为原图像的宽度*fx,同理目标图像的高度为原图像的高度*fy;
如果dsize不为零,fx,fy会自动计算:
fx=dsize.width/src.cols;
fy=dsize.height/src.rows;
因此dsize和(fx,fy)只需设置其中一个,另外一个置为零就可以了。
interpolation取值:
INTER_NN - 最近邻插值。
INTER_LINEAR - 双线性插值 (缺省使用)。
INTER_AREA - 使用象素关系重采样。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NN 方法。
INTER_CUBIC - 立方插值。
三、程序代码
#include "cv.h" // OpenCV 文件头#include "highgui.h"#include "cvaux.h"#include "cxcore.h"#include "opencv2/opencv.hpp"#include "opencv2/imgproc.hpp"#include <iostream>#include <string>using namespace cv;using namespace std;int main(int argc, char *argv[]){ string imageName("C:\\Users\\lidabao\\Desktop\\Lena.bmp"); // 图片在电脑中的绝对地址 Mat src_img = imread(imageName.c_str(), IMREAD_COLOR);//读入图片数据 if (src_img.empty()) return -1; namedWindow("image", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); imshow("image", src_img); Mat dst_img1; Mat dst_img2(src_img.rows*0.5, src_img.cols*2.0, src_img.type()); // 双线性插值 resize(src_img, dst_img1, Size(), 0.5, 0.5); // 立方插值 resize(src_img, dst_img2, dst_img2.size(), INTER_CUBIC); namedWindow("resize image1", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); namedWindow("resize image2", CV_WINDOW_AUTOSIZE | CV_WINDOW_FREERATIO); imshow("resize image1", dst_img1); imshow("resize image2", dst_img2); waitKey(0);}
四、解释
1、双线性插值
resize(src_img, dst_img1, Size(), 0.5, 0.5);
第一个参数为原图片
第二个参数为目的图片
第三个参数为图像大小
第四个参数为fx指水平方向的比率
第五个参数为fy指垂直方向的比率
2、立方插值
Mat dst_img2(src_img.rows*0.5, src_img.cols*2.0, src_img.type());resize(src_img, dst_img2, dst_img2.size(), INTER_CUBIC);
resize第一个参数为原图片
第二个参数为目的图片
第三个参数为图像大小
第四个参数为插值类型
Mat dst_img2从新定义一个图像矩阵
五、结果
六、注意
正确的配置opencv
正确使用resize()函数
- OPENCV入门教程八:resize改变图像尺寸
- opencv中用Resize和图像金字塔改变尺寸的区别
- opencv图像resize(改变图片大小)
- OpenCv中改变图像尺寸
- OpenCv中改变图像尺寸
- opencv改变图像的尺寸
- opencv之改变图像尺寸
- opencv改变图像大小cvResize和resize
- OpenCV resize函数改变图像的大小
- Opencv尺寸调整-resize函数
- opencv resize一张图像
- 【OpenCV学习笔记】【函数学习】七(改变图像尺寸)
- opencv对图像的旋转操作以及尺寸改变
- 改变图像大小(Resize)
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- OpenCV改变图像大小的操作,resize与图像金字塔方法
- OpenCV--图像的缩放-resize()
- opencv中的图像resize函数
- 我决定把 Expper 文章收藏和分享网站的源码开源了
- Selenium2+java 环境搭建
- php面试题目
- JavaScript Base64编码解码代码
- java笔记--八成Java开发者解答不了的问题
- OPENCV入门教程八:resize改变图像尺寸
- linux运维人员必会的30道shell编程面试题
- AndFix热修复 —— 实战与源码解析
- SharedSDK短信验证码GUI
- 【HDU】2604 - Queuing(递推 & 思维 & 矩阵构造 & 快速幂)
- How to allow a restricted port
- swift清除缓存实例
- 13张IT职业技能&学习图谱
- 线程池模式比较-------ICE线程池模型------L/F领导者跟随者模式