Python使用OpenCV對圖像進行縮放功能
OpenCV:圖片縮放和圖像金字塔
對圖像進行縮放的最簡單方法當然是調用resize函數啦!
resize函數可以將源圖像精確地轉化為指定尺寸的目標圖像。
要縮小圖像,一般推薦使用CV_INETR_AREA來插值;若要放大圖像,推薦使用CV_INTER_LINEAR。
現在說說調用方式
第一種,規定好你要圖片的尺寸,就是你填入你要的圖片的長和高。
#include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; //圖片的縮小與放大 int main() { Mat img = imread("lol5.jpg"); imshow("原始圖", img); Mat dst = Mat::zeros(512, 512, CV_8UC3); //我要轉化為512*512大小的 resize(img, dst, dst.size()); imshow("尺寸調整之後", dst); waitKey(0); }
第二種,填入你要縮小或者放大的比率。
#include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; //圖片的縮小與放大 int main() { Mat img = imread("lol5.jpg"); imshow("原始圖", img); Mat dst; resize(img, dst, Size(),0.5,0.5);//我長寬都變為原來的0.5倍 imshow("尺寸調整之後", dst); waitKey(0); }
接下來說說圖像金字塔
說白瞭,圖像金字塔就是用來進行圖像縮放的,幹的事情跟resize函數沒兩樣,那我們還需要學它嗎?我覺得有必要的額,因為在學習卷積神經網絡中會遇到這個名詞,所以都學一學吧,搞圖形都繞不過他!
說說什麼是圖像金字塔。
其實非常好理解,如上圖所示,我們將一層層的圖像比喻為金字塔,層級越高,則圖像尺寸越小,分辨率越低。
兩種類型的金字塔:
- 高斯金字塔:用於下采樣,主要的圖像金字塔;
- 拉普拉斯金字塔:用於重建圖像,也就是預測殘差(我的理解是,因為小圖像放大,必須插入一些像素值,那這些像素值是什麼才合適呢,那就得進行根據周圍像素進行預測),對圖像進行最大程度的還原。比如一幅小圖像重建為一幅大圖像,
圖像金字塔有兩個高頻出現的名詞:上采樣和下采樣。現在說說他們倆。
- 上采樣:就是圖片放大(所謂上嘛,就是變大),使用PryUp函數
- 下采樣:就是圖片縮小(所謂下嘛,就是變小),使用PryDown函數
下采樣將步驟:
對圖像進行高斯內核卷積
將所有偶數行和列去除
下采樣就是圖像壓縮,會丟失圖像信息。
上采樣步驟:
- 將圖像在每個方向放大為原來的兩倍,新增的行和列用0填充;
- 使用先前同樣的內核(乘以4)與放大後的圖像卷積,獲得新增像素的近似值。
上、下采樣都存在一個嚴重的問題,那就是圖像變模糊瞭,因為縮放的過程中發生瞭信息丟失的問題。要解決這個問題,就得看拉普拉斯金字塔瞭。
下面給出OpenCV中pryUp和pryDown的用法。
#include<opencv2\opencv.hpp> #include<opencv2\highgui\highgui.hpp> using namespace std; using namespace cv; //圖像金字塔 int main() { Mat img = imread("lol8.jpg"); imshow("原始圖", img); Mat dst,dst2; pyrUp(img, dst, Size(img.cols*2, img.rows*2)); //放大一倍 pyrDown(img, dst2, Size(img.cols * 0.5, img.rows * 0.5)); //縮小為原來的一半 imshow("尺寸放大之後", dst); imshow("尺寸縮小之後", dst2); waitKey(0); }
顯然,無論是放大還是縮小,圖像都變得模糊瞭,這就是他的致命缺點。
個人認為,要做縮放就用resize函數吧,畢竟方便太多而且圖像不會變模糊!
到此這篇關於Python使用OpenCV對圖像進行縮放功能的文章就介紹到這瞭,更多相關OpenCV圖像縮放內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- OpenCV 圖像金字塔的實現示例
- C++ opencv圖像處理實現圖片幾何變換示例
- Python圖像處理之圖像金字塔詳解
- C++ opencv圖像處理實現灰度變換示例
- python OpenCV圖像金字塔