用OpenCV实现Photoshop算法(九): 高反差保留

系列文章:

用OpenCV实现Photoshop算法(一): 图像旋转

用OpenCV实现Photoshop算法(二): 图像剪切

用OpenCV实现Photoshop算法(三): 曲线调整

用OpenCV实现Photoshop算法(四): 色阶调整

用OpenCV实现Photoshop算法(五): 亮度对比度调整

用OpenCV实现Photoshop算法(六): 变为黑白图像

用OpenCV实现Photoshop算法(七): 调整色相饱和度

用OpenCV实现Photoshop算法(八): 可选颜色

用OpenCV实现Photoshop算法(九): 高反差保留

九、高反差保留(High Pass)

高反差保留是一个Photoshop的滤镜功能。常见的用法是用于锐化,对图像进行1个像素的高反差保留,再将得到的新图像以强光混合方式叠加在原图上,可得到非常好的锐化效果。如果需要深度锐化,反复作这个动作。


(一)原理

请看这一篇:PS理论:高斯模糊与高反差保留


(二)算法:

首先对原图进行高斯模糊, 然后将新图与原图的每一个点的数值相减,再加127,则得到高反差保留图。 

即: 高反差保留 = 高斯模糊图-原图 +127


(三)OpenCV实现

1, 我用OpenCV 编写了一个 Filter 滤镜类在源文件 Filter.hpp,  Filter.cpp中

2, Filter类中有一个方法 HighPass(), 使用它即可。 (注意:是 static静态方法)

3,源码及例程下载在这: 高反差保留源码


(四)例程

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

#include "Filter.hpp"

using namespace std;
using namespace cv;

static Mat src;
static Mat dst;
static int radius = 10;

static void callbackAdjust(int , void *)
{

	Filter::HighPass(src, dst, radius / 10.0 );
	imshow("photo", dst);
}

int main()
{
	src = imread("building.jpg");

	if ( !src.data ) {
		cout << "error read image" << endl;
		return -1;
	}

	namedWindow("photo");
	createTrackbar("radius", "photo", &radius, 100, callbackAdjust);
	callbackAdjust(0, 0);

	waitKey();
	return 0;
}

运行效果:



高反差保留得到的图是一个近似于灰度的图片。


猜你喜欢

转载自blog.csdn.net/c80486/article/details/52506429