1. 程式人生 > >用OpenCV實現Photoshop演算法(九): 高反差保留

用OpenCV實現Photoshop演算法(九): 高反差保留

系列文章:

用OpenCV實現Photoshop演算法(四): 色階調整

九、高反差保留(High Pass)

高反差保留是一個Photoshop的濾鏡功能。常見的用法是用於銳化,對影象進行1個畫素的高反差保留,再將得到的新影象以強光混合方式疊加在原圖上,可得到非常好的銳化效果。如果需要深度銳化,反覆作這個動作。

(一)原理


(二)演算法:

首先對原圖進行高斯模糊, 然後將新圖與原圖的每一個點的數值相減,再加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;
}

執行效果:


高反差保留得到的圖是一個近似於灰度的圖片。