码迷,mamicode.com
首页 > 其他好文 > 详细

数字图像处理特效中彩色墨水效果的设计与实现

时间:2015-02-12 21:26:29      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:图像处理   算法   彩色墨水   c++   

先来看两张对比图,首先是原图。

技术分享














































下面是处理后的效果,其实下图看起来已经不再像是一张拍摄的照片了,更像是手工绘制的。

技术分享


其实除了对于边缘的描绘外,显然对色彩也需要进行适当处理。

应该还可以有改进的空间,但是毕竟算法的实现方式非常的简单,而且毕竟体现了处理此类问题所应该考虑的基本思想。


下面是我基于MAGICHOUSE平台用C++实现的代码。


函数调用部分

SeaFun::InkSketch(our_image_buffer,temp_imageBuffer,X_image,Y_image);

for(int n=0; n<sum; n+=4)
{
        temp_imageBuffer[n] = temp_imageBuffer[n]>0 ? our_image_buffer[n]:temp_imageBuffer[n];
        temp_imageBuffer[n+1] = temp_imageBuffer[n+1]>0 ? our_image_buffer[n+1]:temp_imageBuffer[n+1];
        temp_imageBuffer[n+2] = temp_imageBuffer[n+2]>0 ? our_image_buffer[n+2]:temp_imageBuffer[n+2];
}


实现部分

    static void InkSketch(BYTE* image0, BYTE* image1, unsigned int w, unsigned int h)
    {
        BYTE** imageBuf0 = CreatImage(image0, w, h);
        BYTE** imageBuf1 = CreatImage(image1, w, h);

        double scale=2;
        int templt[25]={
             -1,  -1,  -1,  -1, -1,
             -1,  -1,  -1,  -1, -1,
             -1,  -1,  30,  -1, -1,
             -1,  -1,  -1,  -1, -1,
             -1,  -1,  -5,  -1, -1
        };

        int x,y;
        int a;
        
        for(y=2; y<h-2; y++)
        for(x=2; x<w-2; x++)
        {
            a=TempltExcute(imageBuf0,w,h,templt,5,x,y);
            a*= scale;
            a = a>255?255:a;    
            a = a<0?0:a;
            SetPixel2(imageBuf1,x,y,a);
        }

        free(imageBuf0);
        free(imageBuf1);
    }


数字图像处理特效中彩色墨水效果的设计与实现

标签:图像处理   算法   彩色墨水   c++   

原文地址:http://blog.csdn.net/baimafujinji/article/details/43770433

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!