您的位置:首页 > 运维架构

PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二)

2014-12-07 21:46 561 查看
PhotoShop算法实现高级篇-剪纸艺术滤镜(三十二)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai
剪纸是中国古代乃至今日的传统艺术,它的团简单,色调单调,多以红色为主。针对传统剪纸艺术,可以通过Photoshop来为其重新着色,重塑剪纸艺术。

剪纸效果的原理很简单,首先将彩色图像转换为黑白图像,然后对黑白图像进行着色即可。在前面的系列位置中有对图像进行灰度化处理,见:PhotoShop算法实现--图像灰度化处理(六),及伪彩色编码(着色),见:PhotoShop算法实现--伪彩色图像处理(八)。下面的算法实现剪纸效果:

// bgColor:背景色
// bgColor:前景色
void PhotoShop::PaperCut(Mat& img, Mat& dst, Scalar bgColor, Scalar fgColor)
{
	Mat temp;
	Gray(img, temp, ***ERAGE);  // 灰度化
	Scalar _sMean = mean(temp);  // 求灰度均值
	double dmean = _sMean.val[0];

	int height = img.rows;
	int width = img.cols;
	int chns = img.channels();
	
	if ( dst.empty())
		dst.create( height, width, img.type());

	int i, j, k;
	for ( i=0; i<height; i++)
	{
		unsigned char* tempData = (unsigned char*)temp.data + temp.step*i;
		unsigned char* dstData = (unsigned char*)dst.data + dst.step*i;
		for ( j=0; j<width; j++)
		{
			if ( tempData[j*chns]> dmean) // 前景
			{
				dstData[j*chns] = bgColor.val[0];
				dstData[j*chns+1] = bgColor.val[1];
				dstData[j*chns+2] = bgColor.val[2];
			}
			else
			{
				dstData[j*chns] = fgColor.val[0];
				dstData[j*chns+1] = fgColor.val[1];
				dstData[j*chns+2] = fgColor.val[2];
			}
		}
	}
}
对于中国龙,多以***为主,下面这将红龙变黄龙:



红猪变黄猪:



通过修改函数中的bgColor和fgColor可以自由改变剪纸的颜色,使其产生不同的视觉效果;对于剪纸艺术来说,通过剪出一种颜色,就可以自由搭配各种颜色,可以充分发展和传扬剪纸艺术。

作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: