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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

pyrDown和pyrUp函数

發(fā)布時(shí)間:2025/4/16 编程问答 8 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pyrDown和pyrUp函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

pyrDown函數(shù):

函數(shù)的作用:

對(duì)圖像進(jìn)行濾波然后進(jìn)行下采樣

函數(shù)調(diào)用形式:

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

參數(shù)詳解:


InputArray?src:表示輸入圖像

?OutputArray?dst:表示輸出圖像

const Size&?dstsize=Size():表示輸出圖像的大小

?int?borderType=BORDER_DEFAULT:表示圖像邊界的處理方式


函數(shù)的操作過(guò)程:、

  • 1、與高斯內(nèi)核卷積:

  • 2、將所有偶數(shù)行和列去除。


pyrUp函數(shù)

函數(shù)功能:

對(duì)圖像進(jìn)行高斯濾波,然后進(jìn)行上采樣;

函數(shù)調(diào)用形式:

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


參數(shù)跟上面函數(shù)一樣;



opencv代碼:

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <math.h> #include <stdlib.h> #include <stdio.h>using namespace cv;/// 全局變量 Mat src, dst, tmp; char* window_name = "Pyramids Demo";/*** @函數(shù) main*/ int main( int argc, char** argv ) {/// 指示說(shuō)明printf( "\n Zoom In-Out demo \n " );printf( "------------------ \n" );printf( " * [u] -> Zoom in \n" );printf( " * [d] -> Zoom out \n" );printf( " * [ESC] -> Close program \n \n" );/// 測(cè)試圖像 - 尺寸必須能被 2^{n} 整除src = imread( "../images/chicky_512.jpg" );if( !src.data ){ printf(" No data! -- Exiting the program \n");return -1; }tmp = src;dst = tmp;/// 創(chuàng)建顯示窗口namedWindow( window_name, CV_WINDOW_AUTOSIZE );imshow( window_name, dst );/// 循環(huán)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( "** Zoom In: Image x 2 \n" );}else if( (char)c == 'd' ){ pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );printf( "** Zoom Out: Image / 2 \n" );}imshow( window_name, dst );tmp = dst;}return 0; }


代碼理解:

  • 裝載圖像(此處路徑由程序設(shè)定,用戶無(wú)需將圖像路徑當(dāng)作參數(shù)輸入)

    /// 測(cè)試圖像 - 尺寸必須能被 2^{n} 整除 src = imread( "../images/chicky_512.jpg" ); if( !src.data ){ printf(" No data! -- Exiting the program \n");return -1; }
  • 創(chuàng)建兩個(gè)Mat實(shí)例, 一個(gè)用來(lái)儲(chǔ)存操作結(jié)果(dst), 另一個(gè)用來(lái)存儲(chǔ)零時(shí)結(jié)果(tmp)。

    Mat src, dst, tmp; /* ... */ tmp = src; dst = tmp;
  • 創(chuàng)建窗口顯示結(jié)果

    namedWindow( window_name, CV_WINDOW_AUTOSIZE ); imshow( window_name, dst );
  • 執(zhí)行無(wú)限循環(huán),等待用戶輸入。

    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( "** Zoom In: Image x 2 \n" );}else if( (char)c == 'd' ){ pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 ) );printf( "** Zoom Out: Image / 2 \n" );}imshow( window_name, dst );tmp = dst; }

    如果用戶按?ESC?鍵程序退出。 此外,它還提供兩個(gè)選項(xiàng):

    • 向上采樣 (按 ‘u’)

      pyrUp( tmp, dst, Size( tmp.cols*2, tmp.rows*2 )

      函數(shù)?pyrUp?接受了3個(gè)參數(shù):

      • tmp: 當(dāng)前圖像, 初始化為原圖像?src?。
      • dst: 目的圖像( 顯示圖像,為輸入圖像的兩倍)
      • Size( tmp.cols*2, tmp.rows*2 )?: 目的圖像大小, 既然我們是向上采樣,?pyrUp?期待一個(gè)兩倍于輸入圖像(?tmp?)的大小。
    • 向下采樣(按 ‘d’)

      pyrDown( tmp, dst, Size( tmp.cols/2, tmp.rows/2 )

      類似于?pyrUp, 函數(shù)?pyrDown?也接受了3個(gè)參數(shù):

      • tmp: 當(dāng)前圖像, 初始化為原圖像?src?。
      • dst: 目的圖像( 顯示圖像,為輸入圖像的一半)
      • Size( tmp.cols/2, tmp.rows/2 )?:目的圖像大小, 既然我們是向下采樣,?pyrDown?期待一個(gè)一半于輸入圖像(?tmp)的大小。
    • 注意輸入圖像的大小(在兩個(gè)方向)必須是2的冥,否則,將會(huì)顯示錯(cuò)誤。

    • 最后,將輸入圖像?tmp?更新為當(dāng)前顯示圖像, 這樣后續(xù)操作將作用于更新后的圖像。

      tmp = dst;


總結(jié)

以上是生活随笔為你收集整理的pyrDown和pyrUp函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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