使用 opencv 測試卷積核的效果

本文演示了:

1. 如何生成卷積核。(爲卷積核的每個元素賦值)

2. 如何利用 opencv 的 API 測試卷積核的效果。

    說明:本文使用的編輯器是:vs2013,  opencv 版本號是 320。

 

1. 生成卷積核。

            這裏直接把數值賦值給卷積核。

    文件名:tests.h

#pragma once

#include "windows"
#include <iostream>
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"

#pragma comment(lib, "opencv_core320.lib")
#pragma comment(lib, "opencv_imgcodecs320.lib")
#pragma comment(lib, "opencv_imgproc320.lib")
#pragma comment(lib, "opencv_videoio320.lib")
#pragma comment(lib, "opencv_highgui320.lib")


// 邊緣檢測
cv::Mat get_sketch_kernel(int kernel_size);

// 圖像銳化
cv::Mat get_sharpening_kernel(int kernel_size);

// 測試
void convol_test();



2. 測試卷積核的效果

    文件名:tests.cpp

#include "tests.h"

using namespace std;
using namespace cv;


// 邊緣檢測
cv::Mat get_sketch_kernel(int kernel_size)
{
	// 這裏直接使用拉普拉斯算子作爲卷積核
	Mat kernel = (Mat_<float>(3, 3) << 1, 1, 1, 1, -8, 1, 1, 1, 1);
	return kernel;
}


// 圖像銳化
cv::Mat get_sharpening_kernel(int kernel_size)
{
	// 銳化
	Mat kernel = (Mat_<float>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	return kernel;
}


// 卷積核測試。
void convol_test()
{
	Mat src, dst;
	int ddepth;
	Point anchor;
	double delta;

	int kernel_size = 3;
	// 生成一個掩模核 大小爲 kernel_size*kernel_size, 作爲卷積核
	// Mat kernel = get_sharpening_kernel(kernel_size);
	Mat kernel = get_sketch_kernel(kernel_size);

	// 載入一張圖片
	src = imread("./female_ch_007.jpg");
	if (!src.data)
	{
		cout << "invalid data ..." << endl;
		Sleep(3000);
		return;
	}

	// 創建窗口
	imshow("before", src);
	waitKey(500);

	// 初始化濾波器參數
	ddepth = -1;
	anchor = Point(-1, -1);
	delta = 0;
	
	//將核設置好之後,使用函數 filter2D 就可以生成濾波器:
	filter2D(src, dst, ddepth, kernel, anchor, delta, BORDER_DEFAULT);

	imshow("after", dst);
	waitKey(0);

	system("pause");
}


void main()
{
    convol_test();
    
    system("pause");
}


 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章