opencv學習(十九)之均值濾波blur

從本篇開始採用opencv3.2版本進行編譯!!!

均值濾波是一種典型的線性濾波算法,主要是利用像素點鄰域的像素值來計算像素點的值。其具體方法是首先給出一個濾波模板kernel,該模板將覆蓋像素點周圍的其他鄰域像素點,去掉像素本身,將其鄰域像素點相加然後取平均值即爲該像素點的新的像素值,這就是均值濾波的本質。官方給出的kernel模板如下:
這裏寫圖片描述
opencv提供了blur函數實現均值濾波操作,其原型如下:

C++: void blur(InputArray src, OutputArray dst, Size ksize, Point anchor=Point(-1,-1), int borderType=BORDER_DEFAULT )

參數解釋:
. InputArray src: 輸入圖像,可以是Mat類型,圖像深度是CV_8U、CV_16U、CV_16S、CV_32F以及CV_64F其中的某一個。
. OutputArray dst: 輸出圖像,深度和類型與輸入圖像一致
. Size ksize: 濾波模板kernel的尺寸,一般使用Size(w, h)來指定,如Size(3,3)
. Point anchor=Point(-1, -1): 字面意思是錨點,也就是處理的像素位於kernel的什麼位置,默認值爲(-1, -1)即位於kernel中心點,如果沒有特殊需要則不需要更改
. int borderType=BORDER_DEFAULT: 用於推斷圖像外部像素的某種邊界模式,有默認值BORDER_DEFAULT

示例代碼如下,依舊採用滑動條來控制kernel尺寸

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

using namespace std;
using namespace cv;

//定義全局變量
Mat g_srcImage;         //定義輸入圖像
Mat g_dstImage;         //定義目標圖像

const int g_nTrackbarMaxValue = 9;      //定義軌跡條最大值
int g_nTrackbarValue;                   //定義軌跡條初始值
int g_nKernelValue;                     //定義kernel尺寸

void on_kernelTrackbar(int, void*);     //定義回調函數

int main()
{
    g_srcImage = imread("lena.jpg");

    //判斷圖像是否加載成功
    if(g_srcImage.empty())
    {
        cout << "圖像加載失敗!" << endl;
        return -1;
    }
    else
        cout << "圖像加載成功!" << endl << endl;

    namedWindow("原圖像",WINDOW_AUTOSIZE);     //定義窗口顯示屬性
    imshow("原圖像",g_srcImage);

    g_nTrackbarValue = 1;
    namedWindow("均值濾波", WINDOW_AUTOSIZE);   //定義濾波後圖像顯示窗口屬性

    //定義軌跡條名稱和最大值
    char kernelName[20];
    sprintf(kernelName, "kernel尺寸 %d", g_nTrackbarMaxValue);    

    //創建軌跡條
    createTrackbar(kernelName, "均值濾波", &g_nTrackbarValue, g_nTrackbarMaxValue, on_kernelTrackbar);
    on_kernelTrackbar(g_nTrackbarValue, 0);

    waitKey(0);

    return 0;
}

void on_kernelTrackbar(int, void*)
{
    //根據輸入值重新計算kernel尺寸
    g_nKernelValue = g_nTrackbarValue * 2 + 1;

    //均值濾波函數
    blur(g_srcImage, g_dstImage, Size(g_nKernelValue, g_nKernelValue));

    imshow("均值濾波", g_dstImage);
}

運行結果如下:
這裏寫圖片描述

發佈了98 篇原創文章 · 獲贊 630 · 訪問量 123萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章