高反差保留(High Pass)
高反差保留是一个Photoshop的滤镜功能。常见的用法是用于锐化,对图像进行1个像素的高反差保留,再将得到的新图像以强光混合方式叠加在原图上,可得到非常好的锐化效果。如果需要深度锐化,反复作这个动作。
(一)原理
(二)算法:
首先对原图进行高斯模糊, 然后将新图与原图的每一个点的数值相减,再加127,则得到高反差保留图。
即: 高反差保留 = 高斯模糊图-原图 +127
(三)OpenCV实现
1, 我用OpenCV 编写了一个 Filter 滤镜类。在源文件 Filter.hpp, Filter.cpp中
2, Filter类中有一个方法 HighPass(), 使用它即可。 (注意:是 static静态方法)
(四)例程
1 #include <iostream>
2 #include "opencv2/core.hpp"
3 #include "opencv2/imgproc.hpp"
4 #include "opencv2/highgui.hpp"
5
6 #include "Filter.hpp"
7
8 using namespace std; 9 using namespace cv; 10
11 static Mat src; 12 static Mat dst; 13 static int radius = 10; 14
15 static void callbackAdjust(int , void *) 16 { 17
18 Filter::HighPass(src, dst, radius / 10.0 ); 19 imshow("photo", dst); 20 } 21
22 int main() 23 { 24 src = imread("building.jpg"); 25
26 if ( !src.data ) { 27 cout << "error read image" << endl; 28 return -1; 29 } 30
31 namedWindow("photo"); 32 createTrackbar("radius", "photo", &radius, 100, callbackAdjust); 33 callbackAdjust(0, 0); 34
35 waitKey(); 36 return 0; 37 }
运行效果:
高反差保留得到的图是一个近似于灰度的图片。