首先解释下所谓的黑白图片。其实更准确地应该叫256级灰度图。当一个颜色点的R=G=B时,就是我们所谓的“灰色”。由于RGB的取值范围在[0,255],所以一共只有256种可能。

所以彩色图片转为黑白图片的原理非常简单。只要扫描彩图的每一点,让输出图对应点的R=G=B就成了。现在问题的关键就是如何取值了。

一般有两种,一种是彩图RGB三分量的算数平均值,另一种是加权平均值。加权平均是考虑到人类眼睛对不同分量的敏感程度。

具体代码如下:



        /**//// <summary>
        /// 变成黑白图
        /// </summary>
        /// <param name="bmp">原始图</param>
        /// <param name="mode">模式。0:加权平均  1:算数平均</param>
        /// <returns></returns>
        private Bitmap ToGray(Bitmap bmp,int mode)
        ...{
            if (bmp == null)
            ...{
                return null;
            }

            int w = bmp.Width;
            int h = bmp.Height;
            try
            ...{
                byte newColor = 0;
                BitmapData srcData = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
                unsafe
                ...{
                    byte* p = (byte*)srcData.Scan0.ToPointer();
                    for (int y = 0; y < h; y++)
                    ...{
                        for (int x = 0; x < w; x++)
                        ...{

                            if (mode == 0) // 加权平均
                            ...{
                                newColor = (byte)((float)p[0] * 0.114f + (float)p[1] * 0.587f + (float)p[2] * 0.299f);
                            }
                            else    // 算数平均
                            ...{
                                newColor = (byte)((float)(p[0] + p[1] + p[2]) / 3.0f);
                            }
                            p[0] = newColor;
                            p[1] = newColor;
                            p[2] = newColor;

                            p += 3;
                        }
                        p += srcData.Stride - w * 3;
                    }
                    bmp.UnlockBits(srcData);
                    return bmp;
                }
            }
            catch
            ...{
                return null;
            }

        }

转载于:https://www.cnblogs.com/chennie/archive/2012/01/17/2324597.html

C# 图片处理之:彩色图片转为黑白图 .相关推荐

  1. java 生成纯色图片_java实现切图并且判断图片是不是纯色/彩色图片

    java实现切图并且判断图片是不是纯色/彩色图片 发布时间:2020-08-30 15:45:30 来源:脚本之家 阅读:92 作者:点墨花花 整理文档,搜刮出一个java实现切图并且判断图片是否是纯 ...

  2. MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片彩色图片转换成灰度图片

    前言 本文目录 获取图片的信息 将灰度图片变成负片 彩色图片转换成灰度图片 图像噪声的添加 加10次噪声 colorbar的使用 将数据转换为图片 clc clearA是结构体名,用来存储读入的图像数 ...

  3. C# 图片处理之:彩色图片转为黑白图

    首先解释下所谓的黑白图片.其实更准确地应该叫256级灰度图.当一个颜色点的R=G=B时,就是我们所谓的"灰色".由于RGB的取值范围在[0,255],所以一共只有256种可能. 所 ...

  4. python怎么输出图片_python输出彩色图片python 时间处理

    在实际中遇到一个时间处理问题,需要将 Sep 06, 2014 19:30 (UTC 时间) 和 当前时间比较早晚,知道 此 2014-09-06 19:30 格式时间的运算.因此,在处理时,就想 w ...

  5. 灰度图片维度与彩色图片维度-python-scikit-image包

    from skimage import io,data,color import matplotlib.pyplot as plt img=data.chelsea() print(img.shape ...

  6. 黑白图片复原为彩色Picture Colorizer(图片着色器)

    我的曾祖父留下一个黑白照片那是一百年之间了,长辈听说我学习的计算机对于P图应该是算了解的,于是乎我寻找到这个软件可以将黑白的图片复原为彩色图片,分享给大家 Picture Colorizer 中文版下 ...

  7. opencv 学习笔记——读入一张图片,并将其转为灰度图

    读入一张RGB彩色图片,并将其转为灰度图 源码如下: #include <opencv2\highgui\highgui.hpp> #include <opencv2/opencv. ...

  8. 怎样使用PS将彩色图片转为黑白图片

    怎样使用PS将彩色图片转为黑白图片 当我们在使用PS将彩色图片转换为黑白,有以下方法: 原图: 1 图像->模式->灰度: 2 图像->调整->黑白: 3 图像->调整- ...

  9. 彩色图片转为黑白灰阶图片

    彩色图片转为黑白灰阶图片, 使用算法如下. 贴上几张效果图: 附件为demo演示工具.

最新文章

  1. 图神经网络从入门到入门
  2. 详解getchar()函数与缓冲区
  3. Proxy pattern-代理模式
  4. java 枚举 扑克牌_Java入门第三季7-1简易扑克牌作业
  5. 建模matlab仿真视频教程,Simulink建模与仿真视频教程
  6. linux环境下安装mencoder转码工具
  7. 14 、软件测试-MySQL的基本使用方法-增删改查
  8. 夜晚怎么能不吃宵夜呢
  9. 我的世界Mod整合包中的Mod下载
  10. luoguP4568 [JLOI2011]飞行路线
  11. SpringCloud(三):监控中心 hystrix turbine
  12. 关于在ubuntu server 14.04上安装docker以及git之笔记
  13. 分布式系统架构与分布式事务十问十答,小伙伴们赶快收藏吧
  14. python操作CAD转存dwg文件
  15. 解决chrome71.0以上版本flash永久允许
  16. OJ 1199 堆积木
  17. wgt文件怎么安装到手机_uni-app开发经验分享十二: Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息...
  18. 安徽财经大学432统计学考研历年真题库资料
  19. 在南方旅游 VS 在北方旅游
  20. 列表(listview)实现CheckBox全选效果

热门文章

  1. vsftpd的简单安装和配置(只有三步)
  2. js 获取当前gmt时间_javascript-如何将日期转换为GMT?
  3. 安卓mqtt调试工具_MOTT工具调试阿里云物联网平台
  4. python爬虫获取下一页url_Python爬虫获取页面所有URL链接过程详解
  5. java http请求 工具类_java模拟http请求调用远程接口工具类
  6. 两个摄像头合成一路_小米手机成功开发出伸缩式摄像头,秒变单反,这次雷军又火了...
  7. linux as4,as4是linux系统吗?
  8. mysql_install_db创建空库_MySQL数据库的初始化mysql_install_db
  9. ssm整合oracle分页,java实现ssm分页工具类及其使用方法
  10. android emulator培训,android emulator(未完)