博客
关于我
图像尺寸变换
阅读量: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/

你可能感兴趣的文章
mysqlreport分析工具详解
查看>>
MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
查看>>
Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
查看>>
mysql_real_connect 参数注意
查看>>
mysql_secure_installation初始化数据库报Access denied
查看>>
MySQL_西安11月销售昨日未上架的产品_20161212
查看>>
Mysql——深入浅出InnoDB底层原理
查看>>
MySQL“被动”性能优化汇总
查看>>
MySQL、HBase 和 Elasticsearch:特点与区别详解
查看>>
MySQL、Redis高频面试题汇总
查看>>
MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
查看>>
mysql一个字段为空时使用另一个字段排序
查看>>
MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
查看>>
MYSQL一直显示正在启动
查看>>
MySQL一站到底!华为首发MySQL进阶宝典,基础+优化+源码+架构+实战五飞
查看>>
MySQL万字总结!超详细!
查看>>
Mysql下载以及安装(新手入门,超详细)
查看>>
MySQL不会性能调优?看看这份清华架构师编写的MySQL性能优化手册吧
查看>>
MySQL不同字符集及排序规则详解:业务场景下的最佳选
查看>>
Mysql不同官方版本对比
查看>>