【17】图像插值的几种形式(待补充)

#include<opencv2/opencv.hpp>
#include<iostream>

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
    Mat src = imread("0001.jpg");
    if (src.empty()) {
        printf("could not load image...\n");
        return -1;
    }
    imshow("input", src);

    int h = src.rows;
    int w = src.cols;
    float fx = 0.0, fy = 0.0;
    Mat dst = Mat::zeros(src.size(), src.type());
    resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_NEAREST);
    imshow("INTER_NEAREST", dst);

    resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_LINEAR);
    imshow("INTER_LINEAR", dst);

    resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_CUBIC);
    imshow("INTER_CUBIC", dst);

    resize(src, dst, Size(w * 2, h * 2), fx = 0, fy = 0, INTER_LANCZOS4);
    imshow("INTER_LANCZOS4", dst);

    waitKey(0);
    return 0;
}

关于图像插值的API:

 void resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR)
。src    输入图
。dst   输出图,形态和输入图相同,当dsize不等于0,输出图尺寸会和dsize相同,当dsize等于0,输出图尺寸会由输入图尺寸、fx、fy计算而得
。dsize   输出尺寸,当输入为0时,fx、fy皆不可为0,dsize = Size(round(fxsrc.cols),round(fysrc.rows))
。fx   水平缩放比例,当输入为0时,fx=(double)dsize.width/src.cols
。fy   垂直缩放比例,当输入为0时,fy=(double)dsize.height/src.rows
。interpolation    内插方式   内插方式有
a). CV_INTER_NEAREST      最邻近插值点法
b). CV_INTER_LINEAR         双线性插值法
c).CV_INTER_AREA             邻域像素再取样插补
d).CV_INTER_CUBIC           双立方插补,4*4大小的补点

原文链接:https://blog.csdn.net/weixin_41424481/article/details/96975616

关于四种插值方法的分析:

(1)最邻近插值点法,缺点是产生的锯齿多,不够细致。

 

(2)双线性插值法

 

 

 (3)双三次插值

 

 

 

 

 

 

 

 

 https://blog.csdn.net/jia20003/article/details/40020775

 

posted @ 2022-04-02 23:57  0MrMKG  阅读(167)  评论(0)    收藏  举报