数字图像处理风格化效果——霓虹效果

霓虹效果

霓虹效果用来描绘图像的轮廓,勾画颜色变化的边缘,产生轮廓发光的效果。先计算原图像当前像素f(i,j)的红、绿、蓝分量与其相同行f(i+1,j)及相同列f(i,j+1)相邻像素的梯度,即差的平方和的平方根,然后将梯度值作为处理后像素g(i,j)的红、绿、蓝的3个分量。
在这里插入图片描述

上式中r1,g1,b1分别为原图像像素f(i,j)的红、绿、蓝分量值,r2,g2,b2分别为原图像同行相邻像素f(i+1,j)的红、绿、蓝分量值,r3,g3,b3分别为原图像同列相邻像素f(i,j+1)的红、绿、蓝分量值,Red,Green,Blue为图像处理后的像素f(i,j)的红、绿、蓝分量值。

//霓虹
Mat	Neon(Mat src, int con) {
	//针对灰度图像处理
	Mat output(src.size(), CV_8UC3);
	for (int i = 1; i < src.rows - 1; i++) {
		for (int j = 1; j < src.cols - 1; j++) {
			int r1, r2, r3, g1, g2, g3, b1, b2, b3;

			r1 = src.at<Vec3b>(i, j)[2];
			r2 = src.at<Vec3b>(i + 1, j)[2];
			r3 = src.at<Vec3b>(i, j + 1)[2];

			g1 = src.at<Vec3b>(i, j)[1];
			g2 = src.at<Vec3b>(i + 1, j)[1];
			g3 = src.at<Vec3b>(i, j + 1)[1];

			b1 = src.at<Vec3b>(i, j)[0];
			b2 = src.at<Vec3b>(i, j + 1)[0];
			b3 = src.at<Vec3b>(i, j + 1)[0];

			double R1, R2, G1, G2, B1, B2;
			R1 = pow(r1 - r2, 2);
			R2 = pow(r1 - r3, 2);
			G1 = pow(g1 - g2, 2);
			G2 = pow(g1 - g3, 2);
			B1 = pow(b1 - b2, 2);
			B2 = pow(b1 - b3, 2);
			double Red, Green, Blue;
			Red = 2 * sqrt(R1 + R2);
			Green = 2 * sqrt(G1 + G2);
			Blue = 2 * sqrt(B1 + B2);

			Red = Red > 255 ? 255 : Red;
			Green = Green > 255 ? 255 : Green;
			Blue = Blue > 255 ? 255 : Blue;

			Red = Red < 0 ? 0 : Red;
			Green = Green < 0 ? 0 : Green;
			Blue = Blue < 0 ? 0 : Blue;

			output.at<Vec3b>(i, j)[2] = (int)Red;
			output.at<Vec3b>(i, j)[1] = (int)Green;
			output.at<Vec3b>(i, j)[0] = (int)Blue;

		}
	}
	return output;
}

原图

在这里插入图片描述

效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪野Solye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值