天天看點

【OpenCV 4】圖像插值運算

一、程式設計環境:

OpenCV  4.1.0
IDE Visual Studio 2017 Enterprise (15.9.13)
作業系統 Windows 10 x64 中文專業版 (1903)

二、OpenCV 中的插值運算類型:

//! interpolation algorithm
enum InterpolationFlags{
    /** nearest neighbor interpolation */
    INTER_NEAREST        = 0,
    /** bilinear interpolation */
    INTER_LINEAR         = 1,
    /** bicubic interpolation */
    INTER_CUBIC          = 2,
    /** resampling using pixel area relation. It may be a preferred method for image decimation, as
    it gives moire'-free results. But when the image is zoomed, it is similar to the INTER_NEAREST
    method. */
    INTER_AREA           = 3,
    /** Lanczos interpolation over 8x8 neighborhood */
    INTER_LANCZOS4       = 4,
    /** Bit exact bilinear interpolation */
    INTER_LINEAR_EXACT = 5,
    /** mask for interpolation codes */
    INTER_MAX            = 7,
    /** flag, fills all of the destination image pixels. If some of them correspond to outliers in the
    source image, they are set to zero */
    WARP_FILL_OUTLIERS   = 8,
    /** flag, inverse transformation

    For example, #linearPolar or #logPolar transforms:
    - flag is __not__ set: dst(ho , hi) = src(x,y)
    - flag is set: dst(x,y) = src(ho, hi)
    */
    WARP_INVERSE_MAP     = 16
};
           

三、示例代碼:

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

using namespace cv;
using namespace std;

int main(int argc, char** argv) {
	Mat src = imread("../images/test_small.png");
	if (src.empty()) {
		printf("不能加載圖像!\n");
		return -1;
	}
	imshow("1--原圖", 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("2--插值(INTER_NEAREST)", dst);

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

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

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

	waitKey(0);
	return 0;
}

           

四、運作效果:

【OpenCV 4】圖像插值運算
【OpenCV 4】圖像插值運算
【OpenCV 4】圖像插值運算