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

你可能感兴趣的文章
Netty+SpringBoot+FastDFS+Html5实现聊天App详解(一)
查看>>
netty--helloword程序
查看>>
Netty5.x 和3.x、4.x的区别及注意事项(官方翻译)
查看>>
netty——bytebuf的创建、内存分配与池化、组成、扩容规则、写入读取、内存回收、零拷贝
查看>>
netty——Channl的常用方法、ChannelFuture、CloseFuture
查看>>
netty——EventLoop概念、处理普通任务定时任务、处理io事件、EventLoopGroup
查看>>
netty——Future和Promise的使用 线程间的通信
查看>>
netty——Handler和pipeline
查看>>
Vue输出HTML
查看>>
netty——黏包半包的解决方案、滑动窗口的概念
查看>>
Netty中Http客户端、服务端的编解码器
查看>>
Netty中使用WebSocket实现服务端与客户端的长连接通信发送消息
查看>>
Netty中实现多客户端连接与通信-以实现聊天室群聊功能为例(附代码下载)
查看>>
Netty中的组件是怎么交互的?
查看>>
Netty中集成Protobuf实现Java对象数据传递
查看>>
netty之 定长数据流处理数据粘包问题
查看>>
Netty事件注册机制深入解析
查看>>
netty代理
查看>>
Netty入门使用
查看>>
netty入门,入门代码执行流程,netty主要组件的理解
查看>>