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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV实现图像金字塔

發(fā)布時間:2025/7/25 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV实现图像金字塔 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目的:

使用OpenCV中的函數(shù) cv::pyrUp 和 cv::pyrDown 對給定的圖像下采樣和上采樣(downsample 和 upsample).


理論

  • 一般需要把圖像的尺寸調(diào)整為和原圖不一樣的大小。有兩種方法:
  • Upsize(擴大) the image (zoom in) or
  • Downsize(縮小) it (zoom out).
  • OpenCV 中存也有一個幾何變換函數(shù) cv::resize 。本節(jié)將分析在圖像視覺中廣泛使用的圖像金字塔中的使用。

圖像金字塔

  • 圖像金字塔是一組圖像的集合--從一個單一的原始圖像開始,依次下采樣直到達到預(yù)期的條件為止
  • 有兩種常見的圖像金字塔類型:
Gaussian pyramid: 用于降采樣圖像
Laplacian pyramid:
 用于從圖像金字塔較低層(分辨率較低)重建上采樣圖像
  • 在本教程中,我們將使用高斯金字塔。

高斯金字塔(Gaussian Pyramid)

圖像金字塔有一系列的層構(gòu)成,層越高尺寸越小。



  • 每一層從低到頂編號,所以層 (i+1) (denoted as Gi+1比層i ( Gi)小.
  • 在高斯金字塔中生成層(i+1) ,需要按照如下步驟:

    • Gi 用高斯核卷積:
    116???????1464141624164624362464162416414641???????
    • 刪除每一個偶數(shù)行和列.
  • 可以注意到結(jié)果圖像的面積是上一層面積的四分之一.對輸入圖像G0 (原始圖像)迭代這個過程得到整個金字塔。
  • 以上處理過程為對一個圖像下采樣. 如果想讓它變大?: 用0來填充列
    • First, upsize the image to twice the original in each dimension, wit the new even rows and
    • Perform a convolution with the same kernel shown above (multiplied by 4) to approximate the values of the "missing pixels"
  • 這兩個程序(下采樣和上采樣)由OpenCV函數(shù)實現(xiàn)cv::pyrup和cv::pyrdown, 例子見下面代碼
備注
減少圖像的大小,會導(dǎo)致圖像信息的丟失.

代碼

/*** @file Pyramids.cpp* @brief Sample code of image pyramids (pyrDown and pyrUp)* @author OpenCV team*/#include "opencv2/imgproc.hpp"#include "opencv2/imgcodecs.hpp"#include "opencv2/highgui.hpp"using namespace cv;/// Global variablesMat src, dst, tmp;const char* window_name = "Pyramids Demo";/*** @function main*/int main( void ){/// General instructionsprintf( "\n Zoom In-Out demo \n " );printf( "------------------ \n" );printf( " * [u] -> Zoom in \n" );printf( " * [d] -> Zoom out \n" );printf( " * [ESC] -> Close program \n \n" );//![load]src = imread( "../data/chicky_512.png" ); // Loads the test imageif( src.empty() ){ printf(" No data! -- Exiting the program \n");return -1; }//![load]tmp = src;dst = tmp;//![create_window]imshow( window_name, dst );//![create_window]//![infinite_loop]for(;;){int c;c = waitKey(0);if( (char)c == 27 ){ break; }if( (char)c == 'u' ){//![pyrup]pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 ) );//![pyrup]printf( "** Zoom In: Image x 2 \n" );}else if( (char)c == 'd' ){//![pyrdown]pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );//![pyrdown]printf( "** Zoom Out: Image / 2 \n" );}imshow( window_name, dst );//![update_tmp]tmp = dst;//![update_tmp]}//![infinite_loop]return 0;}


結(jié)果


  • 圖像 chicky_512.jpg 大小為512×512, 下采樣不會產(chǎn)生任何錯誤( 512=29). 原圖如下


  • 首先,連續(xù)兩次使用 cv::pyrDown ,通過按鍵'd'實現(xiàn).輸出如下:


  • 注意到由于降采樣已經(jīng)丟失了一些信息. 這個在使用兩次 cv::pyrUp 后可以看到 (按鍵 'u'). 結(jié)果如下:




總結(jié)

以上是生活随笔為你收集整理的OpenCV实现图像金字塔的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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