RGB图像通道值分离、最邻近插值法、双线性插值法

在开始程序编写前,先要理清楚下面几个概念:

1、OpenCV创建图像时,使用的CV_8UC1、CV_32FC3等参数的函数?

CV_[bit_depth] (S|U|F) C[number_of_channels]

(1) bit_depth  --- 代表一个像素点在内存中所占的bit数

比如CV_8UC1就代表一个像素点在内存中所占的bit数是8,则像素值的取值范围为0~255

(2) S|U|F

S --- signed int

U --- unsigned int

F --- float

(3) C[number_of_channels] --- 代表图像的通道数

number_of_channels=1 ---> 单通道图像

number_of_channels=2 ---> 3通道图像

number_of_channels=3 ---> 带Alpha通道的rgb图像,是4通道图像

创建Mat对象:

Mat( int rows, int cols, type )

2、最邻近插值、双线性插值

假设源图像大小为m*n,目标图像大小为a*b。那么,两幅图像的边长比为m/a、n/b,注意:这个值通常不是整数,编程的时候要使用浮点型存储。目标图像的第(i, j)个像素点对应回源图像中的坐标为(i*m/a, j*n/b)。显然,这个坐标通常也不是整数,而非整数的坐标是无法在图像这种离散数据上使用的。这个时候有两种处理方法:

(1)最邻近插值

对计算得到的源图像中的坐标直接四舍五入得到距离它最近的点的坐标,比如说(0.75, 0.25)--->(1, 0),该坐标对应的像素值就是目标图像上用做映射的那个点的像素点。

最邻近插值是一种最基本、最简单的图像缩放算法。效果并不好,放大后的图像有很严重的马赛克,缩小后的图像有很严重的失真。

(2)双线性插值

假设目标图(x, y)映射到原图中是(X+u, Y+v),u,v为X+u, Y+v的小数部分。

我们取它附近的四个点为:(X, Y), (X, Y+1), (X+1, Y), (X+1, Y+1)

目标图(x, y)对应的像素值为:f(X, Y)(1-u)(1-v) + f(X, Y+1)(1-u)v + f(X+1, Y)u(1-v) + f(X+1, Y+1)uv

完整工程代码:

https://download.csdn.net/download/llfjcmx/10797231

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值