按照OPENCV教學文件 純C++ 範例練習紀錄 ~ [opencv_ex09-利用中值濾波medianBlur、高斯雙邊模糊bilateralFilter、最後利用提高對比度遮罩(mask)運算來補強圖像]

按照OPENCV教學文件 純C++ 範例練習紀錄 ~ [opencv_ex09-利用中值濾波medianBlur、高斯雙邊模糊bilateralFilter、最後利用提高對比度遮罩(mask)運算來補強圖像]

按照OPENCV教學文件 純C++ 範例練習紀錄 ~ [opencv_ex09-利用中值濾波medianBlur、高斯雙邊模糊bilateralFilter、最後利用提高對比度遮罩(mask)運算來補強圖像]


GITHUB: https://github.com/jash-git/CPP_opencv249_ex


中值對 椒鹽噪聲(雜訊) 有很好的抑製作用

均值模糊無法克服邊緣像素信息丟失缺陷。原因是均值濾波是基於平均權重

高斯模糊部分克服了該缺陷,但是無法完全避免,因為沒有考慮像素值的不同

高斯雙邊模糊 – 是邊緣保留的濾波方法,避免了邊緣信息丟失,保留了圖像輪廓不變

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

#include <iostream>
#include <cstdio>

#include <sys/timeb.h>
#if defined(WIN32)
    #define  TIMEB    _timeb
    #define  ftime    _ftime
    typedef __int64 TIME_T;
#else
    #define TIMEB timeb
    typedef long long TIME_T;
#endif

using namespace cv;
using namespace std;
Mat src;//input image
void Pause()
{
    printf("Press Enter key to continue...");
    fgetc(stdin);
}
int main()
{
	src = imread("bgImage.jpg");
	if (!src.data)
    {
		printf("could not load image...\n");
	}
    else
    {
        Mat medianBlur;
        Mat bilateralFilter;

        namedWindow("Lena_original", CV_WINDOW_AUTOSIZE);
        imshow("Lena_original", src);

        char output_title00[] = "medianBlur";
        namedWindow(output_title00, CV_WINDOW_AUTOSIZE);
        cv::medianBlur(src, medianBlur, 3);
        imshow(output_title00, medianBlur);

        char output_title01[] = "bilateralFilter";
        cv::bilateralFilter(src, bilateralFilter, 15, 100, 5);
        //- 15 –計算的半徑,半徑之內的像數都會被納入計算,如果提供-1 則根據sigma space參數取值
        //- 150 – sigma color 決定多少差值之內的像素會被計算
        //- 3 – sigma space 如果d的值大於0則聲明無效,否則根據它來計算d值
        namedWindow(output_title01, CV_WINDOW_AUTOSIZE);
        imshow(output_title01, bilateralFilter);

        Mat resultImg00;
        Mat resultImg01;
        Mat kernel = (Mat_<int>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);

        filter2D(medianBlur, resultImg00, -1, kernel, Point(-1, -1), 0);
        namedWindow("medianBlur-Final Result", CV_WINDOW_AUTOSIZE);
        imshow("medianBlur-Final Result", resultImg00);


        filter2D(bilateralFilter, resultImg01, -1, kernel, Point(-1, -1), 0);
        namedWindow("bilateralFilter-Final Result", CV_WINDOW_AUTOSIZE);
        imshow("bilateralFilter-Final Result", resultImg01);
    }
    waitKey(0);
    return 0;
}

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *