jashliao 用 VC++ 實現 fanfuhan OpenCV 教學014 ~ opencv-014-使用resize進行圖像插值[Image Interpolation ~ ​resize()​] 圖像放大/縮小(Zoom In/Zoom Out)

jashliao 用 VC++ 實現 fanfuhan OpenCV 教學014 ~ opencv-014-使用resize進行圖像插值[Image Interpolation ~ ​resize()​] 圖像放大/縮小(Zoom In/Zoom Out)

jashliao 用 VC++ 實現 fanfuhan OpenCV 教學014 ~ opencv-014-使用resize進行圖像插值[Image Interpolation ~ resize()] 圖像放大/縮小(Zoom In/Zoom Out)


資料來源: https://fanfuhan.github.io/

https://fanfuhan.github.io/2019/03/27/opencv-014/


GITHUB:https://github.com/jash-git/fanfuhan_ML_OpenCV

https://github.com/jash-git/jashliao-implements-FANFUHAN-OPENCV-with-VC

★前言:


★主題:
    OPENCV提供使用者可以等比例改變圖像大小的函數resize(),其函數原型與參數介紹如下所示:

    resize(InputArray src, OutputArray dst, Size dsize, double fx=0, double fy=0, int interpolation=INTER_LINEAR )

    interpolation    說明
    INTER_NEAREST    最近鄰插值
    INTER_LINEAR     雙線性插值(預設)
    INTER_AREA       使用像素區域關係進行重採樣。它可能是圖像抽取的首選方法,因為它會產生無雲紋理(波紋)的結果。 但是當圖像縮放時,它類似於INTER_NEAREST方法。
    INTER_CUBIC      4×4像素鄰域的雙三次插值
    INTER_LANCZOS4   8×8像素鄰域的Lanczos插值


C++

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

using namespace std;
using namespace cv;

/*
 * 图像插值
 */
int main() {
    Mat src = imread("../images/test.png");
    if (src.empty()) {
        cout << "could not load image.." << endl;
    }
    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());
    Size S(w * 2, h * 2);

    resize(src, dst, S, fx, fy, INTER_NEAREST);
    imshow("INTER_NEAREST", dst);

    resize(src, dst, S, fx, fy, INTER_LINEAR);
    imshow("INTER_LINEAR", dst);

    resize(src, dst, S, fx, fy, INTER_CUBIC);
    imshow("INTER_CUBIC", dst);

    resize(src, dst, S, fx, fy, INTER_LANCZOS4);
    imshow("INTER_LANCZOS4", dst);

    waitKey(0);
    return 0;
}

Python

import cv2 as cv

src = cv.imread("D:/vcprojects/images/test.png")
cv.namedWindow("input", cv.WINDOW_AUTOSIZE)
cv.imshow("input", src)

h, w = src.shape[:2]
print(h, w)
dst = cv.resize(src, (w*2, h*2), fx=0.75, fy=0.75, interpolation=cv.INTER_NEAREST)
cv.imshow("INTER_NEAREST", dst)

dst = cv.resize(src, (w*2, h*2), interpolation=cv.INTER_LINEAR)
cv.imshow("INTER_LINEAR", dst)

dst = cv.resize(src, (w*2, h*2), interpolation=cv.INTER_CUBIC)
cv.imshow("INTER_CUBIC", dst)

dst = cv.resize(src, (w*2, h*2), interpolation=cv.INTER_LANCZOS4)
cv.imshow("INTER_LANCZOS4", dst)

cv.warpAffine()

cv.waitKey(0)
cv.destroyAllWindows()


★結果圖:

★延伸說明/重點回顧:

    經過實際測試感覺INTER_LINEAR,看起來最舒服

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *