Opencv之圖像柔光效果

1.介紹

    圖像柔光效果在很多商業軟件中都有實現,其能針對原始圖像產生一副新的比較平滑感覺光線比較柔和的效果,給人一種朦朧美。具體的實現分爲以下三步:

      第一步:對原始圖像按指定的半徑進行高斯模糊;

      第二步:對模糊後的圖像繼續進行亮度和對比度的調整;

      第三步:按照公式dst = X + Y - X * Y / 255進行處理,其中X代表原始圖像,Y代表第二步所得到的圖片

 

2.代碼

#include<opencv2\opencv.hpp>
#include<iostream>

using namespace std;
using namespace cv;

double alpha = 1;
double beta = 50;

void softGlowTrans(const Mat& src, Mat& dst) {
	GaussianBlur(src, dst, cv::Size(11, 11), 3, 3);
	dst.convertTo(dst, dst.type(), alpha, beta);
	int width = src.cols;
	int high = src.rows;
	for (int h = 0; h < high; ++h) {
		for (int w = 0; w < width; ++w) {
			dst.at<Vec3b>(h, w)[0] = src.at<Vec3b>(h, w)[0] + dst.at<Vec3b>(h, w)[0] - src.at<Vec3b>(h, w)[0] * dst.at<Vec3b>(h, w)[0] / 255;
			dst.at<Vec3b>(h, w)[1] = src.at<Vec3b>(h, w)[1] + dst.at<Vec3b>(h, w)[1] - src.at<Vec3b>(h, w)[1] * dst.at<Vec3b>(h, w)[1] / 255;
			dst.at<Vec3b>(h, w)[2] = src.at<Vec3b>(h, w)[2] + dst.at<Vec3b>(h, w)[2] - src.at<Vec3b>(h, w)[2] * dst.at<Vec3b>(h, w)[2] / 255;
		}
	}
}


int main() {
	Mat src = imread("test.png");
	Mat dst = Mat::zeros(src.size(), src.type());
	softGlowTrans(src, dst);

	imshow("src", src);
	imshow("dst", dst);
	waitKey();
	return 0;
}

    效果圖:

 

3.參考資料

    https://www.cnblogs.com/Imageshop/p/3145216.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章