1. 程式人生 > >opencv學習(二十三)之方框、均值、高斯、中值、雙邊濾波綜合比較

opencv學習(二十三)之方框、均值、高斯、中值、雙邊濾波綜合比較

/*
 *本程式的目的旨在對前面介紹的濾波器進行一個比較
 *對比每種濾波器的濾波效果和耗時
 *除雙邊濾波外其他濾波器kernel均是5*5或5
 *對於雙邊濾波器取其直徑典型值30
 *sigmaColor和sigmaSpace的值均由直徑計算而來
*/

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace std;
using namespace cv;

int
main() { Mat srcImage = imread("lena.jpg"); if(srcImage.empty()) { cout << "圖片載入失敗!" << endl; return -1; } else cout << "圖片載入成功!" << endl << endl; namedWindow("原影象", WINDOW_AUTOSIZE); imshow("原影象", srcImage); /********************方框濾波*******************/
Mat dstImage_boxFilter; double time_boxFilter = static_cast<double>(getTickCount()); boxFilter(srcImage, dstImage_boxFilter, -1, Size(5, 5)); time_boxFilter = ((double)getTickCount()-time_boxFilter)/getTickFrequency(); cout << "方框濾波耗時: " << time_boxFilter << " s"
<< endl; namedWindow("方框濾波影象", WINDOW_AUTOSIZE); imshow("方框濾波影象", dstImage_boxFilter); /********************均值濾波*****************/ Mat dstImage_blur; double time_blur = static_cast<double>(getTickCount()); blur(srcImage, dstImage_blur, Size(5, 5)); time_blur = ((double)getTickCount()-time_blur)/getTickFrequency(); cout << "均值濾波耗時: " << time_blur << " s" << endl; namedWindow("均值濾波影象", WINDOW_AUTOSIZE); imshow("均值濾波影象", dstImage_blur); /********************高斯濾波******************/ Mat dstImage_GaussianBlur; double time_GaussianBlur = static_cast<double>(getTickCount()); GaussianBlur(srcImage, dstImage_GaussianBlur, Size(5, 5), 0, 0); time_GaussianBlur = ((double)getTickCount()-time_GaussianBlur)/getTickFrequency(); cout << "高斯濾波耗時: " << time_GaussianBlur << " s" << endl; namedWindow("高斯濾波影象", WINDOW_AUTOSIZE); imshow("高斯濾波影象", dstImage_GaussianBlur); /*******************中值濾波*******************/ Mat dstImage_medianBlur; double time_medianBlur=static_cast<double>(getTickCount()); medianBlur(srcImage, dstImage_medianBlur, 5); time_medianBlur = ((double)getTickCount()-time_medianBlur)/getTickFrequency(); cout << "中值濾波耗時: " << time_medianBlur << " s" << endl; namedWindow("中值濾波影象", WINDOW_AUTOSIZE); imshow("中值濾波影象", dstImage_medianBlur); /******************雙邊濾波******************/ Mat dstImage_bilateralFilter; double time_bilateralFilter = static_cast<double>(getTickCount()); bilateralFilter(srcImage, dstImage_bilateralFilter, 30, 60, 15); time_bilateralFilter=((double)getTickCount()-time_bilateralFilter)/getTickFrequency(); cout << "雙邊濾波耗時: " << time_bilateralFilter << " s" << endl; namedWindow("雙邊濾波影象", WINDOW_AUTOSIZE); imshow("雙邊濾波影象", dstImage_bilateralFilter); waitKey(0); return 0; }

程式執行結果:
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

PS:程式執行時間與編譯環境和電腦硬體都有關係,本結果僅供參考,以自己實驗結果為準!!!