3 ways to use OpenCV to blur images

 

image

 

上圖就是我們這次所要呈現的結果,教學開始:

 

第一種

      「平滑法」簡單來說就是取平均值的意思,其中 Size(9, 9) 代表的是對每一個 pixel為中心,向外擴散99的遮罩矩陣去做計算,將遮罩矩陣裡的平均值來代替中心點的值(平均值:矩陣裡加總後,除上矩陣數量),至於Size()裡的值建議取奇數(因為我們要以中心向外擴散),此外值給得越大圖片就會更加模糊,可自行視情況調整,範例如下方程式碼:

 

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    Mat original = imread("Lenna.jpg");
    Mat img_blur;

    blur(original, img_blur, Size(9, 9));

    imshow("original image", original);
    imshow("blur image", img_blur);

    waitKey();
}

 

第二種

      「中值濾波器」有了第一種方法的概念後,這種方法也淺顯易懂了,找尋遮罩矩陣裡的中位數的值來代替中心點的值,至於下方的參數 與第一種方法的 Size(9, 9) 有著異曲同工之妙,便不再贅述,而此種方法的優勢是在於當一張圖片中我們在找尋遮罩矩陣裡的值差異越大時,通來會比「平滑法」的效果來的更好,如下方程式碼:

 

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    Mat original = imread("Lenna.jpg");
    Mat median_blur;

    medianBlur(original, median_blur, 9);

    imshow("original image", original);
    imshow("median_blur image", median_blur);

    waitKey();
}

 

第三種

      「高斯濾波器」也可以稱之為低通濾波器,也就是頻率低的值通過,頻率高的值直接丟棄,至於在一張圖片中何謂頻率高或頻率低呢???

頻率高:圖片中變化較大的地方,也意味著可以做為辨別圖片的依據,也就是特徵點。

頻率低:圖片中變化較小的地方,也意味著這是圖片中較為不重要的資訊。

因此我們把特徵點給捨棄了,那麼我們也就較難找尋辨別圖片的依據,即可得到一張模糊的圖片了,如下方程式碼:

 

#include<opencv2/opencv.hpp>
using namespace cv;
int main()
{
    Mat original = imread("Lenna.jpg");
    Mat gaussian_blur;

    GaussianBlur(original, gaussian_blur, Size(9, 9), 0, 0);

    imshow("original image", original);
    imshow("gaussian_blur image", gaussian_blur);

    waitKey();
}

 


如需更多客製化服務:


另外有安裝或者其他使用上的問題,皆可參考下列篇章:

如有任何問題歡迎下方留言討論!!!

arrow
arrow

    微笑創客 發表在 痞客邦 留言(0) 人氣()