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

   效果图:

bcb97127e8a8e90004fa5409668b015e.png

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值