使用 opencv 测试卷积核的效果

本文演示了:

1. 如何生成卷积核。(为卷积核的每个元素赋值)

2. 如何利用 opencv 的 API 测试卷积核的效果。

    说明:本文使用的编辑器是:vs2013,  opencv 版本号是 320。

 

1. 生成卷积核。

            这里直接把数值赋值给卷积核。

    文件名:tests.h

#pragma once

#include "windows"
#include 
#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_(3, 3) << 1, 1, 1, 1, -8, 1, 1, 1, 1);
	return kernel;
}


// 图像锐化
cv::Mat get_sharpening_kernel(int kernel_size)
{
	// 锐化
	Mat kernel = (Mat_(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");
}


 

 

 

 

 

你可能感兴趣的:(c++,opencv,图片处理,卷积)