双线性插值原理如下图:
编程如下:
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/core/core.hpp>
#include<iostream>
using namespace std;
using namespace cv;
//实现双线性插值
Mat BilinearInterpolation(Mat& src)
{
CV_Assert(src.data!=NULL);
int srcRows = src.rows;
int srcCols = src.cols;
//定义目标函数
Mat dst=Mat::zeros(150,150,src.type());
int dstRows = dst.rows;
int dstCols = dst.cols;
//缩放因子
double sx = src.cols / dst.cols;
double sy = src.rows / dst.rows;
for (int i = 0; i < dst.rows; i++)
{
//求目标图像的像素对应原图像的坐标,为了使得目标图像中心与原图像中心对齐,使用下面的公式
double index_i = (i + 0.5)*sy - 0.5;
//判断是否越界
if (index_i < 0)
index_i = 0;
if (index_i &g