【opencv】几何变换——仿射变换(5 插值算法)

5 插值算法

5.1 最近领插值

  • 从坐标(x,y)的四个相邻整数坐标中找到离它最近的一个
  • 例:(2.3,4.7),四个相邻整数坐标分别为:(2,4)、(2,5)、(3,4)、(3,5)离(2.3,4.7)最近的是(2,5)

5.2双线性插值

  • (x,y):([x],[y])、([x]+1,[y])、([x],[y]+1)、([x]+1,[y]+1)
  • f(x,y)=(1+ab-a-b)*1+(a-ab)*2+(b-1)*3+ab *4

5.2.1 利用函数resize()

void resize(InputArray src,OutputArray dst,Size dsize,double fx=0,double fy=0,int interpolation=INTER_LINEAR)
  • src:输入图像矩阵
  • dst:输出图像矩阵
  • dsize:二元元组(宽,高),输出图像的大小
  • fx:在水平方向上缩放比例,默认0
  • fy:在垂直方向上缩放比例,默认0
  • interpolation:插值法,INTE_NEAREST,INTE_LINEAR(默认)
#include <opencv2/core/core.hpp>  
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
    String pic_name = "C://Users//lsh//Desktop//1.jpg";
    Mat img = imread(pic_name, IMREAD_GRAYSCALE);
    if (!img.data)
        return -1;
    Mat dst;
    //resize(img, dst, Size(), 0.5, 0.5);//等比例缩小两倍
    //resize(img, dst, Size(img.cols / 2, img.rows / 2), 0, 0);//等比例缩小两倍
    resize(img, dst, Size(img.cols / 2, img.rows / 2), 0.5, 0.5);//等比例缩小两倍
    imshow("img", img);
    imshow("dst", dst);
    waitKey(0);
    return 0;
}

5.2.2利用warpAffine()函数

warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])
  • src:输入图像矩阵
  • M:2行3列的仿射变换矩阵
  • dsize:二元元组(宽,高),输出图像的大小
  • flags:插值法,INTE_NEAREST,INTE_LINEAR(默认)
  • borderMode:填充模式,BORDER_CONSTANT
  • borderValue:当borderMode=BORDER_CONSTANT时的填充值
  • 需要创建缩放仿射矩阵
#include <opencv2/core/core.hpp>  
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main() {
    String pic_name = "C://Users//lsh//Desktop//1.jpg";
    Mat img = imread(pic_name, IMREAD_GRAYSCALE);
    if (!img.data)
        return -1;
    Mat s = (Mat_<float>(2, 3) << 0.5, 0, 0, 0, 0.5, 0);
    Mat dst;
    warpAffine(img, dst,s, Size(img.cols / 2, img.rows / 2));//等比例缩小两倍
    imshow("img", img);
    imshow("dst", dst);
    waitKey(0);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值