OpenCV图像锐化

目录

实现原理

代码实现

结果


实现原理

图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。

锐化可通过拉普拉斯算子实现。拉普拉斯算子作为一个常见的二阶微分算子,放在二维图像中可以表示为:

\triangledown ^{2}f=\frac{\partial ^{2}f}{\partial x^{2}}+\frac{\partial ^{2}f}{\partial y^{2}}

 其x方向相当于:获取x+1点和x点的差值d1,获取x点和x-1点的差值d2,然后d1-d2。

\frac{\partial ^{2}f}{\partial x^{2}}=f(x+1,y)+f(x-1,y)-2f(x,y)

y方向同理。

\frac{\partial ^{2}f}{\partial y^{2}}=f(x,y+1)+f(x,-1y)-2f(x,y)

代码实现

function.h

#pragma once
#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
Mat Sharpen(Mat input, int percent, int type);

function.cpp

#include "function.h"
Mat Sharpen(Mat input, int percent, int type)
{
	Mat result;
	Mat s = input.clone();
	Mat kernel;
	switch (type)
	{
	case 0:
		kernel = (Mat_<int>(3, 3) <<
			0, -1, 0,
			-1, 4, -1,
			0, -1, 0
			);
	case 1:
		kernel = (Mat_<int>(3, 3) <<
			-1, -1, -1,
			-1, 8, -1,
			-1, -1, -1
			);
	default:
		kernel = (Mat_<int>(3, 3) <<
			0, -1, 0,
			-1, 4, -1,
			0, -1, 0
			);
	}
	filter2D(s, s, s.depth(), kernel);
	result = input + s * 0.01 * percent;
	return result;
}

main.cpp

#include <iostream>
#include <opencv2/highgui.hpp>
#include <opencv2/core.hpp>
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/opencv.hpp>
#include "function.h"
using namespace cv;
using namespace std;

int main()
{
	Mat scr = imread("F:\\picture\\江.jpg");
	Mat res = Sharpen(scr, 50, 0);
	imshow("原图", scr);
	imshow("处理后", res);
	waitKey(0);
	return 0;
}

结果

原图
percent为50
percent为-50

 如果以上内容对你有所帮助,不妨点个赞,感谢观看!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值