本文演示了:
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");
}