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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

『OpenCV3』滤波器实现及使用滤波器降噪

發(fā)布時(shí)間:2024/4/17 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 『OpenCV3』滤波器实现及使用滤波器降噪 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、濾波器實(shí)現(xiàn)

我們實(shí)現(xiàn)這樣一個(gè)基于拉普拉斯算子的濾波器核心,并使用它進(jìn)行濾波,這可以做到銳化圖像的效果,

0-10
-15-1
0-10

首先我們完全手動(dòng)的進(jìn)行濾波,依賴指針操作,

void sharpen(const cv::Mat &image, cv::Mat &result) {result.create(image.size(), image.type());std::cout << image.size() << std::endl;int col = image.cols;int row = image.rows;int channels = image.channels();for (int i = 1; i < row - 1; i++ ) {// 必須添加const,因?yàn)閕mage是const的const uchar* previous_row = image.ptr<uchar>(i - 1);const uchar* current_row = image.ptr<uchar>(i);const uchar* next_row = image.ptr<uchar>(i + 1);uchar* out_line = result.ptr<uchar>(i);for (int j = channels; j < (col - 1)*channels; j++) {// cv::saturate_cast<uchar>將輸入截?cái)嘣?到255*out_line++ = cv::saturate_cast<uchar>(5 * current_row[j] - current_row[j - channels] - current_row[j + channels]- previous_row[j] - next_row[j]);}}result.row(0).setTo(cv::Scalar(0,0,0));result.row(row - 1).setTo(cv::Scalar(0, 0, 0));result.col(0).setTo(cv::Scalar(0, 0, 0));result.col(col - 1).setTo(cv::Scalar(0,0,0)); }

OpenCV提供了cv::filter2D函數(shù),當(dāng)我們指定濾波核(一個(gè)Mat格式數(shù)據(jù))可以自動(dòng)代我們完成循環(huán)過程,依賴API實(shí)現(xiàn)本函數(shù)如下:

void sharpen2D(const cv::Mat image, cv::Mat &result) {cv::Mat kernel(3, 3, CV_32F, cv::Scalar(0));kernel.at<float>(1, 1) = 5;kernel.at<float>(0, 1) = -1;kernel.at<float>(1, 0) = -1;kernel.at<float>(2, 1) = -1;kernel.at<float>(1, 2) = -1;cv::filter2D(image, result, image.depth(), kernel); }

對(duì)兩個(gè)版本函數(shù)都進(jìn)行調(diào)用,

cv::Mat image = cv::imread("test.jpg");std::cout << (int)image.data << std::endl;// 自行銳化濾波cv::Mat image1;sharpen(image, image1);show(image1, "銳化");cv::Mat image2;sharpen2D(image, image2);show(image2, "API銳化");

查看輸出(可右鍵查看大圖),

原圖如下:

二、高斯濾波

OpenCV將大部分常用濾波函數(shù)進(jìn)行封裝,資料很多,自行查閱。其中高斯核函數(shù)多提一句,它是可拆分核函數(shù),一個(gè)二維核可以拆解為兩個(gè)一維核,我們既可以這樣調(diào)用:

cv::GaussianBlur(image,result,cv::Size(5, 5), // 窗口大小1.5 // sigma );

也可以這樣調(diào)用,

cv::Mat gauss = cv::getGaussianKernel(5, 1.5, CV_32F); cv::sepFilter2D(image, result, -1, gauss, gauss); // -1代表輸入圖深度 cv::imshow("雙一維高斯濾波", result);

結(jié)果一樣,

?

總結(jié)

以上是生活随笔為你收集整理的『OpenCV3』滤波器实现及使用滤波器降噪的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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