1. 程式人生 > >0021-用OpenCV的pyrUp和pyrDown函式計算影象金字塔(向上/下采樣)

0021-用OpenCV的pyrUp和pyrDown函式計算影象金字塔(向上/下采樣)

影象金字塔是一個影象集合,集合中所有的影象都源於同一個原始影象,通過對原始影象進行連續取樣得到影象集合。
常見的有兩種影象金字塔,即高斯金字塔和拉普拉斯金字塔。
高斯金字塔:向下降取樣影象。金字塔從i層生成第i+1層,先用高斯核對Gi進行卷積,然後,刪除所有偶數行和偶數列。這樣,新得到的影象面積會變為源影象的四分之一。迴圈上述過程,即可產生整個金字塔。
拉普拉斯金字塔:從低層影象中向上取樣重建影象。影象首先在每個維度上擴大為原來的兩倍,新增的行以0填充,然後與指定的濾波器進行卷積(實際上是一個在每一維度上都擴大為2倍的過濾器)去估計“丟失”畫素的近似值。得到後的影象與原來的影象相比會模糊一些,丟失了一些資訊。
在OpenCV中給了兩個函式,pyrUp和pyrDown函式分別用於實現拉普拉斯金字塔和高斯金字塔的上取樣和下采樣


使用示例程式碼如下
程式碼中用到的影象下載連結:http://pan.baidu.com/s/1bQSvls 密碼:dlil
影象處理開發資料、影象處理開發需求、影象處理接私活掙零花錢,可以搜尋公眾號"qxsf321",並關注!
 

//opencv版本:OpenCV3.0
//VS版本:VS2013
//Author:qxsf321.net

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>    
#include <opencv2/imgproc/types_c.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/highgui/highgui_c.h>

#include <iostream>

using namespace cv;
using namespace std;

//全域性變數    
Mat src, dst, tmp;
char* window_name = "pyrDown and pyrUp Demo";

int main(int argc, char** argv)
{

        //測試影象  
        src = imread("jin_dong.jpg");
        if (!src.data)
        {
                printf(" No data! -- Exiting the program \n");
                return -1;
        }

        tmp = src;
        dst = tmp;

        //建立顯示視窗    
        namedWindow(window_name, CV_WINDOW_AUTOSIZE);
        imshow(window_name, dst);

        //迴圈    
        while (true)
        {
                int c;
                c = waitKey(10);

                if ((char)c == 27)
                {
                        break;
                }
                if ((char)c == 'u')
                {
                        pyrUp(tmp, dst, Size(tmp.cols * 2, tmp.rows * 2));
                        printf("pryUp : Image x 2 \n");
                }
                else if ((char)c == 'd')
                {
                        pyrDown(tmp, dst, Size(tmp.cols / 2, tmp.rows / 2));
                        printf("pyrDown : Image / 2 \n");
                }

                imshow(window_name, dst);
                tmp = dst;
        }
        return 0;
}


程式碼說明
程式執行後,按“u”鍵則會對影象進行一次“上取樣”處理,並顯示結果;按“d”鍵則會對影象進行一次“下采樣”處理,並顯示結果。按“Esc”鍵退出程式。
執行結果我錄成了視訊,大家可以看一看。
視訊線上播放地址(注意可以選擇高清版哦):http://v.youku.com/v_show/id_XMz ... j.8428770.3416059.1
視訊檔案下載連結:http://pan.baidu.com/s/1o7IwxUa 密碼:vmul