原文地址:http://www.cnblogs.com/gdjlc/archive/2013/03/05/2943801.html

图像灰度化:
将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255中值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。图像的灰度化处理可用两种方法来实现。
第一种方法使求出每个像素点的R、G、B三个分量的平均值,然后将这个平均值赋予给这个像素的三个分量。
第二种方法是根据YUV的颜色空间中,Y的分量的物理意义是点的亮度,由该值反映亮度等级,根据RGB和YUV颜色空间的变化关系可建立亮度Y与R、G、B三个颜色分量的对应:Y=0.3R+0.59G+0.11B,以这个亮度值表达图像的灰度值。/// <summary>/// 图像灰度化/// </summary>/// <param name="bmp"></param>/// <returns></returns>public static Bitmap ToGray(Bitmap bmp){for (int i = 0; i < bmp.Width; i++){for (int j = 0; j < bmp.Height; j++){//获取该点的像素的RGB的颜色Color color = bmp.GetPixel(i, j);//利用公式计算灰度值int gray = (int)(color.R * 0.3 + color.G * 0.59 + color.B * 0.11);Color newColor = Color.FromArgb(gray, gray, gray);bmp.SetPixel(i, j, newColor);}}return bmp;}
灰度反转:
把每个像素点的R、G、B三个分量的值0的设为255,255的设为0。/// <summary>/// 图像灰度反转/// </summary>/// <param name="bmp"></param>/// <returns></returns>public static Bitmap GrayReverse(Bitmap bmp){for (int i = 0; i < bmp.Width; i++){for (int j = 0; j < bmp.Height; j++){//获取该点的像素的RGB的颜色Color color = bmp.GetPixel(i, j);Color newColor = Color.FromArgb(255 - color.R, 255 - color.G, 255 - color.B);bmp.SetPixel(i, j, newColor);}}return bmp;}
灰度图像二值化:
在进行了灰度化处理之后,图像中的每个象素只有一个值,那就是象素的灰度值。它的大小决定了象素的亮暗程度。为了更加便利的开展下面的图像处理操作,还需要对已经得到的灰度图像做一个二值化处理。图像的二值化就是把图像中的象素根据一定的标准分化成两种颜色。在系统中是根据象素的灰度值处理成黑白两种颜色。和灰度化相似的,图像的二值化也有很多成熟的算法。它可以采用自适应阀值法,也可以采用给定阀值法。/// <summary>/// 图像二值化1:取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255/// </summary>/// <param name="bmp"></param>/// <returns></returns>public static Bitmap ConvertTo1Bpp1(Bitmap bmp){int average = 0;for (int i = 0; i < bmp.Width; i++){for (int j = 0; j < bmp.Height; j++){Color color = bmp.GetPixel(i, j);average += color.B;                    }}average = (int)average / (bmp.Width * bmp.Height);for (int i = 0; i < bmp.Width; i++){for (int j = 0; j < bmp.Height; j++){//获取该点的像素的RGB的颜色Color color = bmp.GetPixel(i, j);int value = 255 - color.B;Color newColor = value > average ? Color.FromArgb(0, 0, 0): Color.FromArgb(255,255, 255);                   bmp.SetPixel(i, j, newColor);}}return bmp;}/// <summary>/// 图像二值化2/// </summary>/// <param name="img"></param>/// <returns></returns>public static Bitmap ConvertTo1Bpp2(Bitmap img){int w = img.Width;int h = img.Height;Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite,PixelFormat.Format1bppIndexed);for (int y = 0; y < h; y++){byte[] scan = new byte[(w + 7) / 8];for (int x = 0; x < w; x++){Color c = img.GetPixel(x, y);if (c.GetBrightness() >= 0.5) scan[x / 8] |= (byte)(0x80 >> (x % 8));}Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);}return bmp;}

转载于:https://www.cnblogs.com/DuanLaoYe/p/5386146.html

图像 - 灰度化、灰度反转、二值化相关推荐

  1. 【OpenCV 例程200篇】37. 图像的灰度化处理和二值化处理

    [OpenCV 例程200篇]37. 图像的灰度化处理和二值化处理 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 按 ...

  2. opencv学习1-3——通道变换,灰度化grayscale,二值化thresholding。

    入手opencv,最好的方法就是对应着程序进行学习是一个很好的方法,通过一些单个程序来了解图形处理的一些知识.这篇文章将介绍下面三个小任务.通道变换,灰度化,普通二值化.本文以C++版本进行代码介绍. ...

  3. halcon—利用顶帽操作减轻图像灰度不均匀对二值化的影响

    先看原图 由于这副图像的灰度是渐变的,如果直接进行二值化处理的话......,会是这个样子 附上顶帽操作相关介绍顶帽运算和黑帽运算 - 爱码网 (likecs.com) 先使用halcon自带顶帽函数 ...

  4. 【转】c#数字图像处理(二)彩色图像灰度化,灰度图像二值化

    转自:https://www.cnblogs.com/dearzhoubi/p/8571652.html 为加快处理速度,在图像处理算法中,往往需要把彩色图像转换为灰度图像,在灰度图像上得到验证的算法 ...

  5. OV2640灰度处理和软件二值化

    图像灰度化 1.分量法 2.最大值法 3.平均法 4.加权平衡法 计算灰度值流程 1.设置OV2640输出的数据为YUV422格式(16位数据的高字节为Y亮度值) void OV2640_YUV422 ...

  6. python对图像二值化_python如何二值化图像

    在python中二值化图像的方法:首先将图片转化为灰色图像:然后自定义灰度界限:最后输入"photo=Img.point(table,'1')"命令(table为自己创建的数组名) ...

  7. java 图像二值化阀值,阈值 二值化图像程序

    在Matlab中将一幅图像阈值分割二值化非常简单,若需要通过阈值th2二值化保留一些大面积的.且有灰度值含有大于th1的点的前景区域,而不需要小面积的区域(th1大于th2),这时会遇到这样的问题:当 ...

  8. Opencv全局二值化和局部二值化(python实现)

    文章目录 1.前置知识 (1).什么是形态学处理 (2).形态学图像处理 2.二值化 (1)全局二值化 1)函数 2)阈值类型 3)代码实战 (2)局部二值化(自适应阈值) 1)函数 2)阈值类型 1 ...

  9. matlab确定灰度阈值T,matlab灰度图像二值化【灰度图像二值化算法研究】

    摘要: 在很多图像处理的过程中,经常需要对灰度图像进行二值化.本文对几种常用的图像二值化算法进行了阐述,并通过仿真,进行比较研究.根据实验结果,阐明了各种算法的优缺点. Abstract: The b ...

  10. Android--Bitmap灰度、二值化、反转颜色

    一.灰度图 /*** 将彩色图转换为灰度图** @param img 位图* @return 返回转换好的位图*/public static Bitmap convertGreyImg(Bitmap ...

最新文章

  1. OpenCV中CvArr* 的含义~
  2. Android 高级进阶之overdraw分析及解决
  3. JVM 虚拟机图文详解!真香!秒懂!一点都不难!
  4. 会议报到和撒离时间算会期_【明日报到】2020中国(三门峡)食用菌新产品新技术博览会工作人员开始分装资料...
  5. 转发- css(display,float,position)
  6. Java之Socket与HTTP区别
  7. Ubuntu下gcc多版本共存和版本切换
  8. java applog_java - 通过Logback登录到App Engine request_log - SO中文参考 - www.soinside.com
  9. azure mysql on vnet_管理 VNet 终结点 - Azure 门户 - Azure Database for MySQL | Microsoft Docs
  10. ES6新特性_ES6_Symbol的介绍与创建---JavaScript_ECMAScript_ES6-ES11新特性工作笔记015
  11. ViedoUtil获取视频的缩略图
  12. 【数据结构笔记42】哈希表应用:文件中单词词频统计
  13. java scanner构造函数_Java使用Scanner作为构造函数的参数
  14. PDF阅读器如何实现免费论文查重
  15. 西瓜书-机器学习5.3 误差逆传播算法
  16. 如何让 PPT 中的多张图大小一致?
  17. Uva 1616 Caravan Robbers (商队抢劫者)
  18. 使用Groovy和7-Zip-JBinding解压缩7-Zip文件
  19. Fortran:数组函数详解
  20. 二维C语言,二维FFT,IFFT,c语言实现

热门文章

  1. fatal error C1010
  2. 深度学习系列(二)【人类语言处理--语音辨识】
  3. Tensorflow官方文档学习理解 (六)-TensorFlow运作方式入门
  4. 卷积的物理意义是什么?
  5. 网络操作系统第十、十一章习题
  6. 如何合理封装你的轮子、飞机、大炮(以封装OkHttp为例)
  7. luogu2508 [HAOI2008]圆上的整点
  8. 开发过程中解决各种跨域问题
  9. 令人赞叹的 MySQL
  10. textfield设置一键删除