文章作者:郭立员

大家好,我是3分钟学堂的郭立员,今天给大家带来一个二值化转黑白图的案例分享。

效果展示

原理讲解
本期文章主要涉及到一些关于颜色的基础原理,对于没有这方面基础知识的同学来说,可能需要多看两遍。

图片是由像素点组成的,每个像素点的颜色是由三原色组成,所谓三原色就是红色、绿色、蓝色。它们通过“叠加”得到新的颜色,举个例子看下图。

通过图片演示可以看到当多个颜色重叠一起时,会得到一个新的颜色,比如红色和绿色在一起就可以得到黄色。如果红绿蓝在一起就是白色。

上图中所用的红绿蓝颜色都是最纯的,专业术语叫做饱和度最高。既然有最高、最纯的说法,那就说明红绿蓝颜色是有等级之分的。

来看上图,红色一点点消失,这个过程就是由最纯到最不纯。在电脑显示上,我们人为的给三原色的每种颜色分成256个等级,用0-255来表示。

一个颜色最纯就是就是255,最不纯就是0,共计256种色阶。而三原色是红绿蓝3种颜色组成,那么混合能够得到颜色种类就是 256256256,约为一千七百万种的颜色。

看上图,当绿色逐渐变纯色以后,红绿中间相交的部分也在发生变化,由红色变成橙色再变成黄色。

这就是为什么会有一千七百多万种颜色的原因,每种原色增加一个色阶,就是一种新的颜色,当然由于相邻色阶直接变化很微小,肉眼分辨不出来,但是对于显示器来说它们是不同的。

当我们把红绿蓝三原色都弄到极限它们会得到什么颜色呢?

①红绿蓝都是最纯,得到白色颜色。

②红绿蓝都是最不纯,得到黑色颜色。

讲完颜色的基础原理我们终于可以讲黑白图二值化了,颜色是有一千七百多万种可能性,二值化呢就是把这些颜色分类,变成两类颜色,并且用两种颜色代替,通常我们用黑白表示,也可以是红蓝、黑金之类的。

说到二值化可能会想到编程上的二进制,也就是0和1。其实用01表示也是可以的。

下面有一个关键点叫做阈值,就是我们划分颜色的临界点,我们颜色有上千万种可能性,那么怎么划分成两种颜色呢?

就需要一个阈值,大于阈值的用白色表示,小于阈值的用黑色表示。

阈值的算法是我们可以随意定,一种常见的算法,就是根据颜色的“亮度”,就是把颜色红绿蓝三个原色的色阶加在一起然后除以3,这个就是颜色的亮度。

比如红色150,绿色80,蓝色10,那么亮度就是(150+80+40)/3等于90。

这种亮度的计算结果范围是最亮255+255+255除以3,那么是255,最暗是0+0+0除以3,那么是0。也就是说亮度的范围也是0-255。

如果以亮度作为阈值的,比方说亮度90,大于90就变成白色,小于90就变成黑色。这样就可以把上千万种颜色变成两种颜色了,得到我们说的图片二值化。

操作过程
第一步:预先想好一个阈值

第二步:获取图片颜色中红绿蓝的值。

Dim PixelData =Image.GetPicData(Path)

第三步:遍历所有像素点的红绿蓝的值。

TracePrint PixelData[1][1][3] //R颜色值
TracePrint PixelData[1][1][2] //G颜色值
TracePrint PixelData[1][1][1] //B颜色值

第四步:把红蓝绿分量相加再除以3,把结果和阈值进行比较,大于阈值的让红绿蓝都等于255,颜色变成白色,小于等于阈值的让红绿蓝都等于0,颜色变成黑色。

当然为了减少运算量,也可以不除以3,而是把阈值乘以3得到一个3倍阈值,即红绿蓝三色相加和3倍的阈值比较大小。

最后一步:把新的颜色数据生成图片,得到一张黑白图。

代码展示:

Dim path="/sdcard/pictures/pic2.png" //原图
Dim path1="/sdcard/pictures/heibaitu.jpg" //黑白图
Dim PixelData =Image.GetPicData(Path)
Dim xy=Image.Size(Path)
Dim x=xy[1]
Dim y=xy[2]
TracePrint x,y
For i = 1 To x
For j = 1 To y
If PixelData[i][j][1] + PixelData[i][j][2] + PixelData[i][j][3] < 240 Then
For k = 1 To 3
PixelData[i][j][k]=0
Next
Else
For k = 1 To 3
PixelData[i][j][k]=255
Next
End If
Next
Next
Image.SavePixelData PixelData, Path1

最后再分享一个彩色转灰度图的源码,有需要的同学可到原文中查看。
文章转自按键精灵论坛,原文地址:http://bbs.anjian.com/showtopic-697736-1.aspx

[安卓按键精灵]彩色图片转黑白图(二值化)相关推荐

  1. linux 图片保存成黑白,8种最常用的方法! 将彩色图片转换为黑白图

    原标题:8种最常用的方法! 将彩色图片转换为黑白图 在生活中,黑白照片并不是完全意义上的黑白照片,而是黑白灰照片.下面就介绍一下我们常用的几种转黑白灰照片方法. 原图 方法一: 去色:(ctrl+sh ...

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

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

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

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

  4. python_opencv(cv2)模块+灰度图二值化及降噪处理

    1.安装: 网上说的那些,pip install cv2, opnecv. 全!都!是!坑!爹!的! 正确的操作方式如下: pip install opencv-python 2.具体用法: 长期更新 ...

  5. python图像灰度化_python实现图片二值化及灰度处理方式

    python实现图片二值化及灰度处理方式 我就废话不多说了,直接上代码吧! 集成环境:win10 pycharm #!/usr/bin/env python3.5.2 # -*- coding: ut ...

  6. python灰度处理打印图片_python实现图片二值化及灰度处理方式

    我就废话不多说了,直接上代码吧! 集成环境:win10 pycharm #!/usr/bin/env python3.5.2 # -*- coding: utf-8 -*- '''4图片灰度调整及二值 ...

  7. matlab利用滑动条控制图片二值化阈值

    前言 由于做项目的时候需要对图片进行二值化,而且图片不同需要达到二值化的效果也不同,如果一直要在程序里试探阈值比较麻烦.所以想利用图像界面中的滑动条人工控制二值化阈值. 一.主要步骤 1. 在matl ...

  8. 如何将 WORD中将彩色图片变成灰度图 或 黑白图 ?

    文章目录 1 灰度图像与黑白图像的区别 2 彩色图 灰度图 相互变换 2.1 彩色图 变 灰度图 2.2 灰度图 变 彩色图 3 彩色图 黑白图 相互变换 3.1 彩色图 变 黑白图 3.1 黑白图 ...

  9. 按键精灵 识别图片形状_精灵形状的2D世界建筑物简介

    按键精灵 识别图片形状 Sprite Shape gives you the freedom to create rich free-form 2D environments straight in ...

  10. 电脑端(PC)按键精灵——5.找色/找图命令

    电脑端(PC)按键精灵--5.找色/找图命令 注:说了键盘.鼠标.其他.控制命令还有安装内容,现在说下颜色/图形命令,这一节相当重要 按键精灵小白入门详细教程: 电脑端(PC)按键精灵-小白入门 详细 ...

最新文章

  1. 【响应式Web前端设计】CSS3伪类与伪元素的区别
  2. python提取excel数据-代码详解:使用Python从不同表格中提取数据
  3. java ee web高级,Java EE Web高级开发案例
  4. Sql 行转列问题总结
  5. ASP.NET Core 开发-中间件(Middleware)
  6. 线性表的各种基本操作
  7. vscode弹出cmd_先看看 VS Code Extension 知识点,再写个 VS Code 扩展玩玩
  8. 数据流技术在GPU和大数据处理中的应用
  9. hisicv200 exfat支持(转)
  10. linux下远程访问Mysql
  11. 济南python工资一般多少-济南Python+人工智能
  12. xtrabackup备份还原的具体操作过程
  13. VTK(0)---CMake工程
  14. C#提取字模[复制即用]
  15. [转载]如何用C#做一个类似于桌面插件的程序
  16. ffmpeg(七)合并音视频文件
  17. The run destination''''is not valid for Running the scheme
  18. tomcat的开发模式和生产模式
  19. windows 2008 r2 sharepoint 2007 文档库 在windows资源管理器打开问题
  20. 博通蓝牙linux,好消息,使用Broadcom蓝牙的有福了,新驱动,新选择,BrcmPatchRAM...

热门文章

  1. 照片识别年龄 php,用OpenCV和深度学习进行年龄识别
  2. DELL笔记本插入耳机没反应
  3. C++ 输出cout
  4. 算法——实现随机拿到30道不重复的20以内的加减法题目
  5. 序列化-Kryo的使用详解
  6. java基于ssm的网上图书商城
  7. 仙之侠道2玖章青门任务怎么做_仙之侠道Ⅱ攻略_仙之侠道Ⅱ柒章 任务全攻略 新手必看_牛游戏网魔兽地图专区...
  8. excel单元格内加空格_如何将Excel一个单元格中空格隔开的内容在不同单元格显示...
  9. Entry name ‘res/drawable-xhdpi-v4/ic_launcher.png‘ collided
  10. 【uniapp | 微信小程序】注册和开发环境搭建