C++ opencv图像放缩与插值

1.API和相关知识

1.resize 重设图像宽长  区别一下resizewindow改原图不输出,另一个输出可差值


  共6个参数
            第1个参数 输入
            第2个参数 输出
            
            第3个参数 输出图像的size
            第4个参数 fx 沿水平的比例因子
            第5个参数 fy 沿垂直的比例因子
                      
                    可以使用size做放缩插值,也可以使用fx,fy卷积做放缩插值
            
            第6个参数 插值方法(查阅文档可知,下文会进行简单介绍)
 

resize的应用场景有很多,其中最常见的就是:

在做一些神经网络训练,深度网络训练,卷积网络训练等的时候,为了方便处理,会把图像resize到指定大小

2.插值算法


关于插值算法,这里简单介绍一下

首先,图像放缩的时候为什么要用插值算法呢?

这是因为,图像放缩时,像素点的位置会发生变化
要想得到放缩后图像像素点的位置,就要经过某种算法计算得来
这种计算的算法就是插值算法。

插值算法有很多相关的应用场景,比如:

几何变换
透视变换
插值计算新像素
resize

 而常见的插值算法有4种,其中前两种比较快,后两种比较慢

INTER_NEAREST = 0 ——最近邻插值
INTER_LINEAR = 1 ——线性插值
INTER_CUBIC = 2 ——立方插值
INTER_LANCZOS4 = 4 ——Lanczos插值
 

2.实例代码

对一张图像进行放缩
接下来我们通过resize对一张图像进行缩小,放大

//函数定义
void resize_demo(Mat& image);

//函数实现
void QuickDemo::resize_demo(Mat& image) {

    Mat zoomin, zoomout;//缩小,放大

    int w = image.cols;
    int h = image.rows;

    imshow("原图", image);

    //resize(image, zoomin, Size(w / 2, h / 2), 0, 0, INTER_LINEAR);
    //imshow("缩小", zoomin);

    resize(image, zoomout, Size(w * 2, h * 2), 0, 0, INTER_LINEAR);
    imshow("放大", zoomout);

}



缩小

C++ opencv图像放缩与插值_第1张图片

放大


C++ opencv图像放缩与插值_第2张图片

你可能感兴趣的:(C++,opencv,深度学习,人工智能,计算机视觉,c++,opencv)