日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

《OpenCV3编程入门》学习笔记6 图像处理(六)图像金字塔与图片尺寸缩放

發(fā)布時間:2023/11/27 生活经验 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《OpenCV3编程入门》学习笔记6 图像处理(六)图像金字塔与图片尺寸缩放 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

6.6 圖像金字塔與圖片尺寸縮放

6.6.1 圖像金字塔

1.圖像金字塔是圖像中多尺度表達(dá)的一種,主要用于圖像分割,是一種以多分辨率解釋圖像的結(jié)構(gòu),通過梯次向下采樣獲得分辨率逐步降低的圖象集合
2.分類:
??(1)高斯金字塔(Gaussianpyramid):向下采樣
??(2)拉普拉斯金字塔(Laplacianpyramid):從金字塔底層圖像重建上層未采樣圖像,在數(shù)字圖像處理中即是預(yù)測殘差,可以對圖像進(jìn)行最大程度地還原,配合高斯金字塔一起使用
3.涉及函數(shù)
??pyrUp函數(shù)和pyrDown函數(shù),2個函數(shù)在imgproc的Image Filtering子模塊中,pyrUp和pyrDown不互逆

6.6.2 高斯金字塔

1.高斯金字塔通過高斯平滑和亞采樣進(jìn)行向下采樣,包含了一系列低通濾波器,截止頻率從上一層到下一層以因子2逐漸增加
2.方法
??對金字塔第i層Gi進(jìn)行高斯內(nèi)核卷積,然后刪除所有偶數(shù)行和偶數(shù)列,新得到圖像Gi+1面積會變?yōu)樵瓐D像的1/4,可對輸入圖像迭代產(chǎn)生金字塔
3.pyrDown函數(shù)
??向下采樣(圖像尺寸減半),生成下一級圖像,是會丟失信息的函數(shù)
4.函數(shù)原型:

void pyrDown(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borderType=BORDER_DEFAULT)

5.參數(shù)說明:
(1)輸入圖像
(2)目標(biāo)圖像
(3)輸出圖像大小,默認(rèn)值Size(),默認(rèn)時由Size((src.cols+1)/2,(src.row+1)/2)計算,需滿足:
?????????????????|dstsize.width*2-src.cols|<=2
?????????????????|dstsize.height*2-src.rows|<=2
(4)邊界模式
6.調(diào)用示例:

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//載入原始圖Mat srcImage = imread("love.jpg");Mat dstImageDown;//顯示原始圖namedWindow("【原始圖】");imshow("【原始圖】", srcImage);//向下取樣操作pyrDown(srcImage, dstImageDown, Size(srcImage.cols / 2, srcImage.rows / 2));//顯示效果圖namedWindow("【向下取樣效果圖】");imshow("【向下取樣效果圖】", dstImageDown);waitKey(0);return 0;
}

6.6.3 拉普拉斯金字塔

1.數(shù)學(xué)定義
????????????????????
式中,Gi表示第i層圖像,UP()操作時將原圖像中位置為(x,y)的像素映射到目標(biāo)圖像的(2x+1,2y+1)位置,即在向上取樣,符號表示卷積,表示5*5的高斯內(nèi)核
2.方法
??將現(xiàn)有圖像每個維度都放大兩倍,新增行和列(偶數(shù)行和列)以0填充,然后使用先前同樣的內(nèi)核(乘以4)與放大后的圖像卷積,來估計“丟失”像素的近似值
3.pyrUp函數(shù):向上采樣(圖像尺寸加倍),利用函數(shù)進(jìn)行拉普拉斯運算:
????????????????????
4.函數(shù)原型:

void pyrUp(InputArray src, OutputArray dst, const Size& dstsize=Size(), int borserType=BORDER_DEFAULT)

5.參數(shù)說明
(1)輸入圖像
(2)目標(biāo)圖像
(3)輸出圖像大小,默認(rèn)值Size(),默認(rèn)時由Size(src.cols*2,src.row*2)計算,需滿足:
????????????????|dstsize.width-src.cols*2|<=(dstsize.width mod2)
????????????????|dstsize.height-src.rows*2|<=(dstsize.height mod2)
(4)邊界模式
6. 調(diào)用示例:

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{//載入原始圖Mat srcImage = imread("love.jpg");Mat dstImageUp;//顯示原始圖namedWindow("【原始圖】");imshow("【原始圖】", srcImage);//向上取樣操作pyrUp(srcImage, dstImageUp, Size(srcImage.cols * 2, srcImage.rows * 2));//顯示效果圖namedWindow("【向上取樣效果圖】");imshow("【向上取樣效果圖】", dstImageUp);waitKey(0);return 0;
}

6.6.4 尺寸調(diào)整函數(shù):resize()函數(shù)

????函數(shù)resize函數(shù)在imgproc模塊的Geometric Image Transformations子模塊中

1.函數(shù)原型

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

2.參數(shù)說明:
(1)輸入圖像
(2)目標(biāo)圖像
(3)輸出圖像大小,等于0時由下式計算圖像大小:
????????????dsize=Size(round(fx*src.cols),round(fy*src.rows))
(4)水平軸的縮放系數(shù),默認(rèn)0,等于0時由下式計算:
????????????????(double)dsize.width/src.cols
(5)垂直軸的縮放系數(shù),默認(rèn)值0,等于0時由下式計算:
????????????????(double)dsize.height/src.rows
(6)插值方式,默認(rèn)為INTER_LINEAR(線性插值),可選插值方式有:
????INTER_NEAREST–最近鄰插值
????INTER_LINEAR–線性插值(默認(rèn),放大圖像,效率高)
????INTER_AREA–區(qū)域插值(利用像素區(qū)域關(guān)系的重采樣插值,縮小圖像)
????INTER_CUBIC–三次樣條插值(超過4*4像素領(lǐng)域的雙三次插值,放大圖像,效率低)
????INTER_LANCZOS4–Lanczos插值(超過8*8像素領(lǐng)域的Lanczos插值)

3.調(diào)用示例:

#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;int main()
{/*//調(diào)用方式1Mat dstImage = Mat::zeros(512, 512, CV_8UC3);//新建一張512*512尺寸的圖片Mat srcImage = imread("love.jpg");resize(srcImage, dstImage, dstImage.size());//指定dsize=dstImage.size(),fx和fy會被計算不需要額外指定//調(diào)用方式2Mat dstImage;Mat srcImage = imread("love.jpg");resize(srcImage, dstImage, Size(), 0.5, 0.5);//指定fx和fy*///載入原圖Mat srcImage = imread("love.jpg");Mat dstImage1, dstImage2;//顯示原圖namedWindow("【原始圖】");imshow("【原始圖】", srcImage);//尺寸調(diào)整操作resize(srcImage, dstImage1, Size(srcImage.cols / 2, srcImage.rows / 2), 0.0, 0.0, 3);resize(srcImage, dstImage2, Size(srcImage.cols * 2, srcImage.rows * 2), 0.0, 0.0, 3);//顯示效果圖imshow("【效果圖1】", dstImage1);imshow("【效果圖2】", dstImage2);waitKey(0);return 0;
}

6.6.5 綜合示例

/*
效果:鍵盤1、2、3、4控制圖片放大與縮小
*/#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;#define WINDOW_NAME "【程序窗口】"
Mat g_srcImage, g_dstImage, g_tmpImage;//鍵盤操作說明
static void ShowHelpText()
{printf("--------------------------------------------------------------------\n");printf("歡迎來到OpenCV圖像金字塔和resize示例程序~\n");printf("按鍵操作說明:\n");printf("\t\t鍵盤按鍵[ESC]-退出程序\n");printf("\t\t鍵盤按鍵[1]-進(jìn)行[resize]函數(shù)圖片放大\n");printf("\t\t鍵盤按鍵[2]-進(jìn)行[resize]函數(shù)圖片縮小\n");printf("\t\t鍵盤按鍵[3]-進(jìn)行[pyrUp]函數(shù)圖片放大\n");printf("\t\t鍵盤按鍵[4]-進(jìn)行[pyrDown]函數(shù)圖片縮小\n");printf("--------------------------------------------------------------------\n");
}
int main()
{//鍵盤操作說明ShowHelpText();//載入原圖g_srcImage = imread("love.jpg");if (!g_srcImage.data){printf("載入原圖失敗~!\n");return false;}//創(chuàng)建顯示窗口namedWindow(WINDOW_NAME,WINDOW_AUTOSIZE);imshow(WINDOW_NAME, g_srcImage);//參數(shù)賦值g_tmpImage = g_srcImage;g_dstImage = g_tmpImage;int key = 0;//輪詢獲取按鍵信息while (1){key = waitKey(9);//讀取鍵值到變量//根據(jù)key值,做不同操作switch (key){case 27: //按鍵ESCreturn 0;break;case '1':  //按鍵【1】,調(diào)用resize函數(shù)resize(g_tmpImage, g_dstImage, Size(g_tmpImage.cols * 2, g_tmpImage.rows * 2));printf(">檢測到按鍵【1】被按下,進(jìn)行【resize】函數(shù)的圖片放大,圖片尺寸*2\n");break;case '2':  //按鍵【2】,調(diào)用resize函數(shù)resize(g_tmpImage, g_dstImage, Size(g_tmpImage.cols / 2, g_tmpImage.rows / 2));printf(">檢測到按鍵【2】被按下,進(jìn)行【resize】函數(shù)的圖片縮小,圖片尺寸/2\n");break;case '3':  //按鍵【3】,調(diào)用pyrUp函數(shù)pyrUp(g_tmpImage, g_dstImage, Size(g_tmpImage.cols * 2, g_tmpImage.rows * 2));printf(">檢測到按鍵【3】被按下,進(jìn)行【pyrUp】函數(shù)的圖片放大,圖片尺寸*2\n");break;case '4':  //按鍵【4】,調(diào)用pyrDown函數(shù)pyrDown(g_tmpImage, g_dstImage, Size(g_tmpImage.cols / 2, g_tmpImage.rows / 2));printf(">檢測到按鍵【4】被按下,進(jìn)行【pyrDown】函數(shù)的圖片縮小,圖片尺寸/2\n");break;default:break;}imshow(WINDOW_NAME, g_dstImage);//將g_dstImage賦給g_tmpImage,方便下一次循環(huán)g_tmpImage = g_dstImage;}return 0;
}

總結(jié)

以上是生活随笔為你收集整理的《OpenCV3编程入门》学习笔记6 图像处理(六)图像金字塔与图片尺寸缩放的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。