图像处理之灰度化和二值化
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达本文转自|新机器视觉
在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均为0~255,比如电脑屏幕上的一个红色的像素点的三个分量的值分别为:255,0,0。
像素点
像素点是最小的图像单元,一张图片由好多的像素点构成,下图是一张美女的大白腿的图片。
查看这张图片的信息,尺寸是800 * 800 的,宽度是800像素,高度是800像素。也就是说这张图片是由一个800 * 800的像素点矩阵构成的(不理解矩阵是什么意思的话,可以把矩阵理解为C语言中的二维数组),这个矩阵是800行,800列,像素是图像的最小单元,这张图片的宽度是800个像素点的长度,高度是800个像素点的长度,共有800 * 800 = 640000个像素点。
因为一个像素点的颜色是由RGB三个值来表现的,所以一个像素点矩阵对应三个颜色向量矩阵,分别是R矩阵,G矩阵,B矩阵,它们也都是800 *800大小的矩阵。下面展示这张美女图片的一部分颜色矩阵数据:
这个是R矩阵中的一部分
这个是G矩阵中的一部分
这个是B矩阵中的一部分
比如每个矩阵的第一行第一列的值分别为:R:240,G:223,B:204,所以这个像素点的颜色就是(240,223,204),三个矩阵的值不一定一 一对应,这样做只是为了便于读者理解。
图像的灰度化
在理解了一张图片是由一个像素点矩阵构成之后,我们就知道我们对图像的处理就是对这个像素点矩阵的操作,想要改变某个像素点的颜色,我们只要在这个像素点矩阵中找到这个像素点的位置,比如第x行,第y列,所以这个像素点在这个像素点矩阵中的位置就可以表示成(x,y),因为一个像素点的颜色由红、绿、蓝三个颜色变量表示,所以我们通过给这三个变量赋值,来改变这个像素点的颜色,比如改成红色(255,0,0),可以表示为(x,y,(R=255,G=0,B=0))。
那么什么叫图片的灰度化呢?其实很简单,就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B(就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等,“=”的意思不是程序语言中的赋值,是数学中的相等),此时的这个值叫做灰度值。
灰度处理的方法
一般灰度处理经常使用两种方法来进行处理。
方法1:
灰度化后的R=(处理前的R + 处理前的G +处理前的B)/ 3
灰度化后的G=(处理前的R + 处理前的G +处理前的B)/ 3
灰度化后的B=(处理前的R + 处理前的G +处理前的B)/ 3
美女图片经过方法1进行灰度化后的效果如下:
方法2:
灰度化后的R = 处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
灰度化后的G = 处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
灰度化后的B = 处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11
美女图片经过方法2进行灰度化后的效果如下:
个人觉得第二种方法处理的效果比较好,第一种方法处理后的图片有点模糊。
图像的二值化
什么叫图像的二值化?二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。在灰度化的图像中灰度值的范围为0~255,在二值化后的图像中的灰度值范围是0或者255。
黑色:
二值化后的R = 0
二值化后的G = 0
二值化后的B = 0
白色:
二值化后的R = 255
二值化后的G = 255
二值化后的B = 255
那么一个像素点在灰度化之后的灰度值怎么转化为0或者255呢?比如灰度值为100,那么在二值化后到底是0还是255?这就涉及到取一个阀值的问题。
常用的二值化方法
方法1:
取阀值为127(相当于0~255的中数,(0+255)/2=127),让灰度值小于等于127的变为0(黑色),灰度值大于127的变为255(白色),这样做的好处是计算量小速度快,但是缺点也是很明显的,因为这个阀值在不同的图片中均为127,但是不同的图片,他们的颜色分布差别很大,所以用127做阀值,白菜萝卜一刀切,效果肯定是不好的。
方法2:
计算像素点矩阵中的所有像素点的灰度值的平均值avg
(像素点1灰度值+...+像素点n灰度值)/ n = 像素点平均值avg
然后让每一个像素点与avg一 一比较,小于等于avg的像素点就为0(黑色),大于avg的 像素点为255(白色),这样做比方法1好一些。
方法3:
使用直方图方法(也叫双峰法)来寻找二值化阀值,直方图是图像的重要特质。直方图方法认为图像由前景和背景组成,在灰度直方图上,前景和背景都形成高峰,在双峰之间的最低谷处就是阀值所在。取到阀值之后再一 一比较就可以了。
下面给出一张美女图片二值化后的效果图:(漂亮的大白腿依稀可见。)
End
好消息,小白学视觉团队的知识星球开通啦,为了感谢大家的支持与厚爱,团队决定将价值149元的知识星球现时免费加入。各位小伙伴们要抓住机会哦!
下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。
下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。
下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。
交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
图像处理之灰度化和二值化相关推荐
- java图像处理:灰度化,二值化,降噪,切割,裁剪,识别,找相似等
前段时间做爬虫,涉及到对图片验证码的破解,这里罗列一些常用的图像处理方法,都很简单并没用到什么复杂的算法,所以不涉及opencv,都是一些直接对rgb像素点的操作,很简单也很好理解,至于识别直接用的t ...
- C语言数字图像处理---1.2 彩色图像灰度化和二值化
本篇主要讲述32位彩色图像的灰度化和二值化内容. [彩色图像灰度化] 1.定义 在上一节中,我们介绍了8位单色灰度图,它使用0-255来表示一个像素,但在实际使用中,我们最常用的还是彩色图像灰度化.对 ...
- opencv图像处理初步(一):灰度化和二值化
一.图像二值化基本原理: 对灰度图像进行处理,设定阈值,在阈值中的像素值将变为1(白色部分),阈值为的将变为0(黑色部分). 二.图像二值化处理步骤: (1)先对彩色图像进行灰度化 //img为原图, ...
- java图像处理---灰度化(二值化)处理
java实现图片灰度化(二值化) 此函数功能: 1. 读图 2. 创建缓冲区 3. 将图片像素复制到缓冲区的相应位置 4. 输出比较 输入: RGB真彩图片 输出: 灰度化(二值化)图片 源码如下: ...
- 图像的色彩类别,灰度化,二值化
灰度化:在RGB模型中,如果R=G=B时,则彩色表示一种灰度颜色,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需一个字节存放灰度值(又称强度值.亮度值),灰度范围为0-255.一般常用的是加权 ...
- 小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化
文章目录 解剖图像 图像处理基本原理 RGB模型 灰度 二值化 图像失真问题 从本节开始,我就要正式踏上小白的计算机视觉探索之路,先从图像基础学习吧 解剖图像 要学会图像处理首先就得知道图像的结构,平 ...
- 灰度处理与二值化的关系
当开始接触图像处理的童鞋可能跟我一样对这两个概念迷惑过, 在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红.绿.蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均 ...
- opencv入门课程:彩色图像灰度化和二值化(采用skimage库和opencv库两种方法)
用最简单的办法实现彩色图像灰度化和二值化: 首先采用skimage库(skimage库现在在scikit_image库中)实现: from skimage.color import rgb2gray ...
- 数字识别java开源_Java基于opencv实现图像数字识别(三)—灰度化和二值化
Java基于opencv实现图像数字识别(三)-灰度化和二值化 一.灰度化 灰度化:在RGB模型中,如果R=G=B时,则彩色表示灰度颜色,其中R=G=B的值叫灰度值:因此,灰度图像每个像素点只需一个字 ...
- bmp图片灰度化和二值化
C语言去除bmp图片的背景 一.前言 二.灰度化 头文件 C文件 三.二值化 一.前言 图像处理中,大部分的处理方法都需要事先把彩色图转换成灰度图才能进行相关的计算.识别. 彩色图转换灰度图的原理如下 ...
最新文章
- C++11中的Lambda表达式
- 微信小程序 canvas 内容(宽高) 兼容不同机型
- Android开发中反编译时出现Unsupported major.minor version 51.0错误的问题
- 整数转罗马数字 python
- oracle Hint 使用
- halcon--1D measuring
- 比较python类的两个instance(对象) 是否相等
- 北京工商大学c语言复试试题,2016年北京工商大学计算机与信息工程学院C语言程序设计复试笔试仿真模拟题...
- python之numpy基础_Python之Numpy操作基础
- 薄板开孔建模计算的ansys命令流
- 铜仁学院官网计算机二级报名,贵州铜仁学院2015年9月全国计算机等级考试报名通知...
- 关于reduce的理解
- [审核]App审核被拒绝(本地网络权限弹框“Local Network”)
- 02.使用fmod实现QQ变声效果
- 2023程序员找工作难?盘点目前IT各大热门行业,看看哪些更有前景
- android查询火车票接口,火车票查询信息接口
- Python过去计算机用户名,Django:如何获取客户端计算机用户名视图.py
- LeetCode 11-20 题
- html浏览器标题闪动,一个网页标题title的闪动提示效果实现思路
- GardenPlanner 下载,园林绿化设计