博客
关于我
图像尺寸变换
阅读量:313 次
发布时间:2019-03-03

本文共 3066 字,大约阅读时间需要 10 分钟。

图像尺寸变换

图像插值原理

由于对图像的操作存在拉伸变换,造成变换前后图像像素点位置发生变化。

  • 两个像素合并成一个像素
  • 两个相邻像素中间多出位置

最邻近法

选择临近的像素。简单,效果较差

线性插值法

选择临近两个像素,建立一次函数,进行投影,得到的数据

双线性插值法

选择临近的四个像素,四个像素两两建立一次函数,再把像素投影到建立好的一次函数上再次建立一次函数得到数据。

应用图像的拉伸变换、旋转、仿射变换、透视变换等涉及到对图像像素位置改变的情况。

图像缩放,反转,拼接

缩放

resize()

void cv::resize(InputArray		src,               OutputArray		dst,               Size				dsize,               double			fx = 0,               double 			fy = 0,               int				interpolation = INTER_LINEAR)
  • src:输入图像
  • dst:输出图像
  • dsize:输出图像的尺寸
  • fx:水平轴的比例因子,如果将水平轴变为原来的两倍,则赋值为2
  • yx:垂直轴的比例因子,如果将垂直轴变为原来的两倍,则赋值为2
  • interpolation:插值方法的标志。

fx , yx 与 dsize 若存在冲突选用dsize

//************************************// Method:    sizeChange// FullName:  sizeChange// Access:    public // Returns:   void// Qualifier: 尺寸变换//************************************void sizeChange(){   	// 尺寸变换	Mat smallImg, bigImg0, bigImg1, bigImg2;	Mat gray = imread("./lena.png", IMREAD_GRAYSCALE);	// 缩小	resize(gray, smallImg, Size(15, 15), 0, 0, INTER_AREA);	// 最近邻插值放大	resize(smallImg, bigImg0, Size(30, 30), 0, 0, INTER_NEAREST);	// 双线性插值	resize(smallImg, bigImg1, Size(30, 30), 0, 0, INTER_LINEAR);	// 双三次插值	resize(smallImg, bigImg2, Size(30, 30), 0, 0, INTER_CUBIC);	namedWindow("smallImage", WINDOW_NORMAL);	imshow("smallImage", smallImg);	namedWindow("bigImg0", WINDOW_NORMAL);	imshow("bigImg0", bigImg0);	namedWindow("bigImg1", WINDOW_NORMAL);	imshow("bigImg1", bigImg1);	namedWindow("bigImg2", WINDOW_NORMAL);	imshow("bigImg2", bigImg2);	waitKey(0);}

翻转

flip()

void cv::flip(InputArray		src,             OutputArray		dst,             int				flipCode)
  • src:输入图像

  • dst:输出图像

  • flipCode:翻转方式标志

    标志 含义
    大于0 绕y轴进行翻转
    等于0 绕x轴进行翻转
    小于0 绕两个轴进行翻转
//************************************// Method:    reverImg// FullName:  reverImg// Access:    public // Returns:   void// Qualifier: 图像翻转//************************************void reverImg(){   	Mat img = imread("./lena.png");	Mat imgx, imgy, imgx_y;	flip(img, imgx, 0);	flip(img, imgy, 1);	flip(img, imgx_y, -1);	imshow("img", img);	imshow("imgx", imgx);	imshow("imgy", imgy);	imshow("imgx_y", imgx_y);	waitKey(0);}

拼接

vconcat()纵向连接

void cv::vconcat(const Mat* 	src,                size_t			nsrc,                OutputArray		dst)
  • src:Mat 矩阵类型的数组
  • nsrc:数组中Mat类型数据的数目
  • 连接后的Mat类矩阵

横向拼接要求高度一致

纵向拼接要求宽度一致

void cv::vconcat(InputArray		src1,                InputArray		src2,                OutputArray		dst)
  • 第一个需要连接的Mat类矩阵
  • 第二个需要连接的Mat类矩阵
  • 连接后的Mat类矩阵

hconcat纵向连接

void cv::hconcat(const Mat*			src,                size_t				nsrc,                OutputtArray		dst)
void cv::hconcat(InputtArray		src1,                InputtArray			src2,                OutputtArray		dst)
//************************************// Method:    imgJoint// FullName:  imgJoint// Access:    public // Returns:   void// Qualifier: 图像拼接//************************************void imgJoint(){   	Mat img00 = imread("./img00.png");	Mat img01 = imread("./img01.png");	Mat img10 = imread("./img10.png");	Mat img11 = imread("./img11.png");	Mat imgl, imgr, img;	// 纵向拼接	vconcat(img00, img10, imgl);	vconcat(img01, img11, imgr);	// 横向拼接	hconcat(imgl, imgr, img);}

转载地址:http://jgkq.baihongyu.com/

你可能感兴趣的文章
nginx一些重要配置说明
查看>>
Nginx下配置codeigniter框架方法
查看>>
Nginx与Tengine安装和使用以及配置健康节点检测
查看>>
Nginx中使用expires指令实现配置浏览器缓存
查看>>
Nginx中使用keepalive实现保持上游长连接实现提高吞吐量示例与测试
查看>>
Nginx中实现流量控制(限制给定时间内HTTP请求的数量)示例
查看>>
nginx中配置root和alias的区别
查看>>
nginx主要流程(未完成)
查看>>
Nginx之二:nginx.conf简单配置(参数详解)
查看>>
Nginx从入门到精通
查看>>
Nginx代理websocket配置(解决websocket异常断开连接tcp连接不断问题)
查看>>
Nginx代理初探
查看>>
nginx代理地图服务--离线部署地图服务(地图数据篇.4)
查看>>
Nginx代理外网映射
查看>>
Nginx代理模式下 log-format 获取客户端真实IP
查看>>
Nginx代理解决跨域问题(导致图片只能预览不能下载)
查看>>
Nginx代理访问提示ERR_CONTENT_LENGTH_MISMATCH
查看>>
Nginx代理配置详解
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>
Nginx代理静态资源(gis瓦片图片)实现非固定ip的url适配网络环境映射ip下的资源请求解决方案
查看>>