opencv 图像金字塔
生活随笔
收集整理的這篇文章主要介紹了
opencv 图像金字塔
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 概念
- 一、opencv 函數支持
概念
圖像金字塔:
圖像金字塔是圖像的集合,所有圖像都來自單個原始圖像,這些圖像被連續下采樣,直到達到某個所需的停止點。
有兩種常見的圖像金字塔:
高斯金字塔:用于對圖像進行下采樣
拉普拉斯金字塔:用于從金字塔較低的圖像(分辨率較低)重建上采樣圖像
高斯金字塔:
把金字塔想象成一組圖層,層越高,尺寸越小。
每一層都從下到上編號,所以層(i+1)(記作Gi+1)比層i (Gi)小。
為了在高斯金字塔中生成層(i+1),我們做如下操作:
1.將Gi與高斯核卷積:
2.刪除每一個偶數的行和列。
生成的圖像將恰好是前一個圖像面積的四分之一。在輸入圖像G0(原始圖像)上迭代這個過程產生整個金字塔。
上面的程序是對圖像的下采樣。如果我們想讓它變大呢?:用0填滿列
1。首先,使用新的偶數行和在每個維度上將圖像放大到原來的兩倍
1.與上面所示的相同內核進行卷積(乘以4),以逼近“缺失像素”的值
一、opencv 函數支持
下采樣:
CV_EXPORTS_W void pyrDown( InputArray src, OutputArray dst,const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );上采樣:
CV_EXPORTS_W void pyrUp( InputArray src, OutputArray dst,const Size& dstsize = Size(), int borderType = BORDER_DEFAULT );代碼示例:
cv::Mat src;src = cv::imread("D:\\QtProject\\Opencv_Example\\pyramid\\pyramid.jpg", cv::IMREAD_COLOR);if (src.empty()) {cout << "Cannot load image" << endl;return;}while(1){show(src);char c = (char)waitKey(0);if( c == 27 ){ break; }else if( c == 'i' ){pyrUp( src, src, Size( src.cols*2, src.rows*2 ) );}else if( c == 'o' ){pyrDown( src, src, Size( src.cols/2, src.rows/2 ) );}}運行效果:
原圖:
兩次上采樣:
兩次下采樣:
總結
以上是生活随笔為你收集整理的opencv 图像金字塔的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序 swiper 自定义组件
- 下一篇: 通俗地讲讲数据降维的原理