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

来源:互联网 发布:网络thug life什么意思 编辑:程序博客网 时间:2024/05/16 15:04

系列文章:

用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;}

运行效果:



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


0 0
原创粉丝点击