图像处理--曝光、霓虹(照亮边缘效果)

转自:图像处理:曝光、霓虹(照亮边缘)效果

Posted on 2008-10-31 15:49 parker 阅读(770) 评论(2) 编辑 收藏

1.效果图:
                
                            (曝光效果)                                                       (霓虹效果)

2.实现原理:
        曝光效果:逆转值小于128的R、G、B分量值,产生正片和负片混合的效果。
        霓虹效果:用来描绘图像的轮廓,勾画颜色变化的边缘,加强其过度效果,产生轮廓发光的效果。
                      主要是根据当前像素与其右方和下方像素的梯度运算,然后将结果值作为当前像素值,
                      即将原图像当前像素的R、G、B分量与其右方和下方像素做梯度运算(差的平方和的平方根),
                      然后将梯度值作为处理后像素的R、G、B的三个分量。
                      [  result = Math.Sqrt( (src-right)*(src-right) + (src-bottom)*(src-bottom) )  ]

3.实现代码:


 1        public static Image Solarize(Image img)
 2        {
 3            int width = img.Width;
 4            int height = img.Height;
 5            Bitmap bmp = new Bitmap(img);
 6
 7            Rectangle rect = new Rectangle(0, 0, width, height);
 8            ImageLockMode flag = ImageLockMode.ReadWrite;
 9            PixelFormat format = PixelFormat.Format32bppArgb;
10            BitmapData data = bmp.LockBits(rect, flag, format);
11
12            IntPtr ptr = data.Scan0;
13
14            int numBytes = width * height * 4;
15            byte[] rgbValues = new byte[numBytes];
16            Marshal.Copy(ptr, rgbValues, 0, numBytes);
17
18            for (int i = 0; i < rgbValues.Length; i += 4)
19            {
20                if (rgbValues[i] < 128)
21                    rgbValues[i] = (byte)(255 - rgbValues[i]);
22                if (rgbValues[i + 1] < 128)
23                    rgbValues[i + 1] = (byte)(255 - rgbValues[i + 1]);
24                if (rgbValues[i + 2] < 128)
25                    rgbValues[i + 2] = (byte)(255 - rgbValues[i + 2]);
26            }
27
28            Marshal.Copy(rgbValues, 0, ptr, numBytes);
29            bmp.UnlockBits(data);
30
31            return (Image)bmp;
32        }


 1        public static Image GlowingEdge(Image img)
 2        {
 3            int width = img.Width;
 4            int height = img.Height;
 5
 6            Bitmap oldImg = (Bitmap)img;
 7            Bitmap newImg = new Bitmap(width, height);
 8
 9            Color c1, c2, c3;
10            int rr, gg, bb;
11            for (int i = 0; i < width - 1; i++)
12            {
13                for (int j = 0; j < height - 1; j++)
14                {
15                    int r = 0, g = 0, b = 0;
16
17                    c1 = oldImg.GetPixel(i, j);
18                    c2 = oldImg.GetPixel(i + 1, j);
19                    c3 = oldImg.GetPixel(i, j + 1);
20
21                    rr = (c1.R - c2.R) * (c1.R - c2.R) + (c1.R - c3.R) * (c1.R - c3.R);
22                    gg = (c1.G - c2.G) * (c1.G - c2.G) + (c1.G - c3.G) * (c1.G - c3.G);
23                    bb = (c1.B - c2.B) * (c1.B - c2.B) + (c1.B - c3.B) * (c1.B - c3.B);
24
25                    r = (int)(3 * Math.Sqrt(rr));
26                    g = (int)(3 * Math.Sqrt(gg));
27                    b = (int)(3 * Math.Sqrt(bb));
28
29                    r = r < 0 ? 0 : r;
30                    r = r > 255 ? 255 : r;
31                    g = g < 0 ? 0 : g;
32                    g = g > 255 ? 255 : g;
33                    b = b < 0 ? 0 : b;
34                    b = b > 255 ? 255 : b;
35
36                    newImg.SetPixel(i, j, Color.FromArgb(r, g, b));
37                }
38            }
39            return newImg;
40        }

4.说明:
        曝光效果采用的是LockBits方法,霓虹效果采用的是GetPixel、SetPixel方法。
        可比较这两种方法在处理图像上的效率问题。

图像处理--曝光、霓虹(照亮边缘效果)

时间: 2024-10-15 12:12:40

图像处理--曝光、霓虹(照亮边缘效果)的相关文章

图像处理之图像梯度效果(转载)

转载自:http://blog.csdn.net/jia20003/article/details/7664777 图像处理之图像梯度效果 基本思想: 利用X方向与Y方向分别实现一阶微分,求取振幅,实现图像梯度效果.关于如何计算图像 一阶微分参见这里:http://blog.csdn.net/jia20003/article/details/7562092 使用的两种微分算子分别为Prewitt与Sobel,其中Soble在X, Y两个方向算子分别为: Prewitt在X, Y方向上梯度算子分别

Atitit 图像处理之仿油画效果&#160;Oilpaint油画滤镜 水彩画 漫画滤镜&#160;v2

Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 1.1. 具体源码参考1 2. ,油画 水彩画具有几个比较明显的特点如下:1 2.1. 明暗层次(灰度)较少  也就5级别够用了1 2.2. 颜色泛用   使用的颜色比较单一,一般不会超过7种颜色,不像真实照片那样,具有丰富的颜色种类:2 3. 水彩画滤镜算法如下:2 3.1. 这个其实就是灰度层次降低维度的过程.3 3.2. 模板半径Radius用来调节水彩画的水彩程度.即是颜色的降低维度的过程3 3.3.

android图像处理,实现变暗效果

图像处理主要是图像的颜色矩阵和坐标矩阵进行处理,要实现变暗效果只需要对颜色矩阵中的RGB偏移减小即可,具体代码如下: int brightness = -80; //RGB偏移量,变暗为负数 ColorMatrix matrix = new ColorMatrix(); matrix.set(new float[]{1, 0, 0, 0, brightness, 0, 1, 0, 0, brightness, 0, 0, 1, 0, brightness, 0, 0, 0, 1, 0}); Co

图像处理之六边形网格分割效果

一:原理 根据输入参数blockSize的大小,将图像分块,决定每块的中心通过该像素块内所有 像素之和的均值与该块内部每个像素比较,RGB值之间几何距离最小为新的中心,迭 代更新运算,直到达到输入参数声明的最大循环次数为止,然后输出结果图像即可. 二:程序实现 类MyCluster,存储每个像素块中心的信息,计算中心位置. 类SuperPixelsFilter, 滤镜实现,完成六边形网格分割的主要功能,其中距离计算,基 于欧几里德距离公式. 三:效果 原图: 效果: 四:完全源代码 packag

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

先来看两张对比图,首先是原图. 下面是处理后的效果,其实下图看起来已经不再像是一张拍摄的照片了,更像是手工绘制的. 其实除了对于边缘的描绘外,显然对色彩也需要进行适当处理. 应该还可以有改进的空间,但是毕竟算法的实现方式非常的简单,而且毕竟体现了处理此类问题所应该考虑的基本思想. 下面是我基于MAGICHOUSE平台用C++实现的代码. 函数调用部分 SeaFun::InkSketch(our_image_buffer,temp_imageBuffer,X_image,Y_image); for

图像处理之简单数字水印 - 文字轧花效果

http://blog.csdn.net/jia20003/article/details/7338614 图像处理之文字轧花效果- 简单数字水印 @ gloomyfish 首先看一下效果,左边是一张黑白的文字图像,右边是混合之后的数字水印效果 实现原理 主要是利用位图块迁移算法,首先提取文字骨架,宽度为一个像素.然后将提取的骨架,按 照一定的像素值填充到目标图像中即可.关于位图块迁移算法说明请看这里: http://en.wikipedia.org/wiki/Bit_blit 程序思路: 1.

Android Shader渲染以及实现水波纹霓虹文字雷达等效果

"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> Android Shader渲染以及实现水波纹霓虹文字雷达等效果 - lzy的博客 - 博客频道 - CSDN.NET lzy的博客 目录视图 摘要视图 订阅 [活动]2017 CSDN博客专栏评选 &nbsp [5月书讯]流畅的Python,终于等到你!    &a

ISP图像处理

ISP(Image Signal Processor),即图像处理,主要作用是对前端图像传感器输出的信号做后期处理,主要功能有线性纠正.噪声去除.坏点去除.内插.白平衡.自动曝光控制等,依赖于ISP才能在不同的光学条件下都能较好的还原现场细节,ISP技术在很大程度上决定了摄像机的成像质量.它分为独立与集成两种形式. 一般情况下,配备独立ISP的手机,在图像处理方面有更大的优势,且随着手机摄像头像素的提高,高速连拍,全高清甚至4K录制的加入,手机对ISP的处理性能要求越来越高. 不少主打拍摄功能的

Atitit Atitit 图像处理之&#160;&#160;Oilpaint油画滤镜 水彩画 源码实现

Atitit Atitit 图像处理之 Oilpaint油画滤镜 水彩画 源码实现 1.1. 具体原理参考1 2. 水彩画滤镜算法如下:1 2.1. 这个其实就是灰度层次降低维度的过程.2 2.2. 模板半径Radius用来调节水彩画的水彩程度.即是颜色的降低维度的过程2 1.1. 具体原理参考 Atitit 图像处理之仿油画效果 Oilpaint油画滤镜 水彩画 漫画滤镜 v2 2. 水彩画滤镜算法如下: 灰度,离散化(聚类).. 灰度层次N就是水彩画最多使用的颜色明暗层次,一般7种一下为好