双线性插值
简介代码实现总结
简介
双线性插值是指现在某个方向进行两次线性插值,之后在另外一个方向对插值的结果再进行一次线性插值。以下图为例,已知
Q
11
Q_{11}
Q11,
Q
12
Q_{12}
Q12,
Q
21
Q_{21}
Q21,
Q
22
Q_{22}
Q22四个点的坐标和像素值、
P
P
P点的坐标,求
P
P
P点的像素值。双线性插值的做法是首先在
x
x
x方向上做两次线性插值获得
R
1
R_{1}
R1点和
R
2
R_{2}
R2点的像素值,之后在
y
y
y方向上做一次线性插值获得
P
P
P点的像素值。
![双线性插值示意图](https://img-blog.csdnimg.cn/c545fc7701a34321a7dc55496944b8f0.png#pic_center)
代码实现
在实际处理的过程中,依次遍历目标
M
a
t
Mat
Mat所有像素点
(
x
,
y
)
(x,y)
(x,y),找到像素点
(
x
,
y
)
(x,y)
(x,y)在原
M
a
t
Mat
Mat上的对应点
(
s
x
,
s
y
)
(s_{x},s_{y})
(sx,sy)。由于
s
x
s_{x}
sx、
s
y
s_{y}
sy的值可能不是整数,所以取最接近的四个点进行双线性插值。话不多说,直接来看c++代码。
Mat sxxcz1(Mat img, int h, int w) {
Mat img2(h, w, CV_8UC3, Scalar::all(0));
float ori_h = img.rows;
float ori_w = img.cols;
float rate_h = ori_h / h;
float rate_w = ori_w / w;
for (int i = 0; i |