OpenCV制作自己的线性滤镜
生活随笔
收集整理的這篇文章主要介紹了
OpenCV制作自己的线性滤镜
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
濾波過程:
將內(nèi)核錨放置在確定的像素的頂部,其余核心覆蓋圖像中的相應(yīng)局部像素。
將內(nèi)核系數(shù)乘以相應(yīng)的圖像像素值并對結(jié)果求和。
將結(jié)果放置在輸入圖像中錨點的位置。
通過在整個圖像上掃描內(nèi)核來重復(fù)所有像素的過程。
?
API函數(shù)
1、建立自己的內(nèi)核kernel_size = 3 + 2*( ind%5 );kernel = Mat::ones( kernel_size, kernel_size, CV_32F )/ (float)(kernel_size*kernel_size);2、filter2D(src, dst, ddepth , kernel, anchor, delta, BORDER_DEFAULT );
參數(shù)表示:src:源圖像dst:目的地圖像ddepth:深度dst。負(fù)值(如?1)表示深度與源相同。內(nèi)核:要通過圖像掃描的內(nèi)核anchor:錨點相對于其內(nèi)核的位置。位置點(-1,-1)表示默認(rèn)的中心。delta:在關(guān)聯(lián)期間要添加到每個像素的值。默認(rèn)情況下為0BORDER_DEFAULT:我們默認(rèn)設(shè)置此值(以下教程中有更多詳細(xì)信息)
代碼
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>using namespace cv;int main(int argc, char* argv[])
{Mat src = imread("12.bmp", 1);namedWindow("原圖像", WINDOW_FREERATIO);namedWindow("自創(chuàng)均值濾波圖", WINDOW_FREERATIO);namedWindow("API均值濾波圖", WINDOW_FREERATIO);if (src.empty()){std::cout << "打開圖片失敗,請檢查" << std::endl;return -1;}imshow("原圖像", src);Mat dst,dst1;dst = src.clone();dst1 = src.clone();//實現(xiàn)均值濾波//Mat kernel =(Mat_<float>(3,3)<<1,1,1,1,1,1,1,1,1)/9;Mat kernel = Mat::ones(Size(7, 7), CV_32F)/49;filter2D(src,dst,-1, kernel,Point(-1,-1),0,4);blur(src, dst1, Size(7, 7), Point(-1, -1), 4);imshow("自創(chuàng)均值濾波圖", dst);imshow("API均值濾波圖", dst1);waitKey(0);return 0;
}
?
?
?
總結(jié)
以上是生活随笔為你收集整理的OpenCV制作自己的线性滤镜的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断图像质量的好坏(opencv)
- 下一篇: OpenCV Hough Line变换