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,看起來最舒服