图像的灰度化、二值化
目录
1、图像像素点
2、灰度化
3、二值化
4、使用open cv库进行图片的灰度化、二值化
4.1、将图片转换为灰度图
4.2、将灰度图转换为二值化图图片
1、图像像素点
在图像处理中,用RGB三个分量(R:Red,G:Green,B:Blue),即红、绿、蓝三原色来表示真彩色,R分量,G分量,B分量的取值范围均为0~255,比如电脑屏幕上的一个红色的像素点的三个分量的值分别为:255,0,0。
如下面几个常用的颜色真彩值:
颜色名称 | R | G | B |
---|---|---|---|
黑色 | 0 | 0 | 0 |
蓝色 | 0 | 0 | 255 |
绿色 | 0 | 255 | 0 |
红色 | 255 | 0 | 0 |
黄色 | 255 | 255 | 0 |
白色 | 255 | 255 | 255 |
2、灰度化
什么叫图片的灰度化呢?灰度化就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B (就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等,“=”的意思不是程序语言中的赋值,是数学中的相等) 此时的这个值叫做灰度值。
图像灰度化常用的算法:
算法名 | 实现 |
---|---|
Rec601Luma | 0.298839R' + 0.586811G'+ 0.114350B' |
Rec601Luminance | 0.298839R + 0.586811G + 0.114350B |
Rec709Luma | 0.212656R' + 0.715158G' + 0.072186B' |
Rec709Luminance | 0.212656R + 0.715158G + 0.072186B |
Brightness | max(R', G', B') |
Lightness | (min(R', G', B') + max(R', G', B')) / 2.0 |
Average | (R' + G' + B') / 3.0 |
MS | (R'^2 + G'^2 + B'^2) / 3.0 |
RMS | sqrt( (R'^2 + G'^2 + B'^2) / 3.0 ) |
也可以借助工具包或者工具使用图像灰度化。如python中的PIL、Open cv、自定义算法等
convert()函数,用于不同模式图像之间的转换。
PIL中有九种不同模式,分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。我主要尝试了1和L。
from PIL import Image as image
import matplotlib.pyplot as plt
import numpy as np
# 显示原始图
img = image.open('data/dog.jpg')
img# 获取图像数据的方法
img_list = np.array(img.getdata())
img_list.shaep# 显示原始图
img = image.open('data/dog.jpg')
plt.imshow(img)
convert()函数,用于不同模式图像之间的转换。
PIL中有九种不同模式,分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。我主要尝试了1和L。
L:模型的算法公式:Rec601Luminance = 0.298839R + 0.586811G + 0.114350B
new_im = img.convert('L')
plt.imshow(new_im)
new_im = img.convert('I')
plt.imshow(new_im)
自定义转换算法 Rec601Luminance = 0.298839R + 0.586811G + 0.114350B
im = np.array(img)
im[:,:,0] = im[:,:,0]*0.3
im[:,:,1] = im[:,:,1]*0.59
im[:,:,2] = im[:,:,2]*0.11
im = np.sum(im, axis=2)
plt.imshow(im)
3、二值化
什么叫图像的二值化?二值化就是让图像的像素点矩阵中的每个像素点的灰度值为0(黑色)或者255(白色),也就是让整个图像呈现只有黑和白的效果。
- 灰度化的图像中灰度值的范围为0~255
- 在二值化后的图像中的灰度值范围是0或者255。
from PIL import Image as image
import matplotlib.pyplot as plt
import numpy as np
img = image.open('data/dog.jpg')# 二值化函数
def binary_scale(): img = image.open('data/dog.jpg')Img = img.convert('L') # PIL有九种不同模式: 1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。这里选择L灰度模式threshold = 200 # 设定的阈值table = np.where(( np.array(range(0, 256)))>threshold,1,0)photo = Img.point(table, '1')plt.imshow(photo)binary_scale()
4、使用open cv库进行图片的灰度化、二值化
import cv2 as cvimg = cv.imread('data/dog.jpg')
img.shape# 并不是在编辑器内打开图片,会新开一个窗口打开图片
cv.imshow("image", img)
# 不写这一句,图片会一闪而过。参数0表示一直等待
cv.waitKey(0)
4.1、将图片转换为灰度图
# 将图片转换为灰度图
img_gray = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
img_gray.shape
cv.imshow('img_gray',img_gray)
cv.waitKey(0)
4.2、将灰度图转换为二值化图图片
# 1、固定阈值二值化
ret,im_at_fixed = cv.threshold(img_gray, 200, 255, cv.THRESH_BINARY)
plt.imshow(im_at_mean,cmap='gray')
# 2、算术平法的自适应二值化
im_at_mean = cv.adaptiveThreshold(img_gray, 255, cv.ADAPTIVE_THRESH_MEAN_C, cv.THRESH_BINARY, 11, 8)
plt.imshow(im_at_mean,cmap='gray')
# 3、高斯加权均值法自适应二值化
im_at_mean = cv.adaptiveThreshold(img_gray, 255, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv.THRESH_BINARY, 11, 8)
plt.imshow(im_at_mean,cmap='gray')
图像的灰度化、二值化相关推荐
- 图像灰度、二值化、膨胀和腐蚀(纯Java篇)
在c.c++或者python环境中可以使用opencv非常容易实现图像灰度.二值化.膨胀和腐蚀等功能:但在java环境中,使用opencv来处理相对比较麻烦,简单的操作用opencv处理也相对过重,这 ...
- Java图像处理:灰度、二值化、浮雕、去色、反向、怀旧、放大镜等
图像是由一个个像素点组合而成,图像处理本身实际上是遍历图像的像素点,对像素点的RGB值进行更改,以达到图像处理的目的. 接下来,我们主要介绍一下图片转化为二维像素点数组的方法以及部分图像处理如灰度.二 ...
- 示例程序009--阙值化(二值化,cvThreshold)
涉及的函数: cvSplit 分割多通道数组成几个单通道数组或者从数组中提取一个通道 void cvSplit( const CvArr* src, CvArr* dst0, CvArr* dst1, ...
- java入门之 美图相机(原图、灰度、二值化、马赛克、融合、轮廓获取)
编写美图相机时,我们首先需要了解图片再计算机中的存储形式,详情可见http://t.csdn.cn/MgOfO 目录 <1>创建显示图片的主界面 1.添加窗体,用数列添加按钮,设置窗体可视 ...
- Android--Bitmap灰度、二值化、反转颜色
一.灰度图 /*** 将彩色图转换为灰度图** @param img 位图* @return 返回转换好的位图*/public static Bitmap convertGreyImg(Bitmap ...
- python_opencv(cv2)模块+灰度图二值化及降噪处理
1.安装: 网上说的那些,pip install cv2, opnecv. 全!都!是!坑!爹!的! 正确的操作方式如下: pip install opencv-python 2.具体用法: 长期更新 ...
- 灰度图片二值化matlab
rge图片灰度化之后,往往存在灰度值比较近的情况.根据自己的需求将灰度值调到两个极端值,也叫做阈值处理. 本文的阈值是自定义的,建立在已经读取到灰度图片灰度值的基础之上. 存在获取灰度图片最佳阈值的算 ...
- Python,折线图,手写数字,图像反色、二值化、28X28
题目一: 请使用Matplotlib中的折线图工具,绘制正弦和余弦函数图像,其中x的取值范围是 要求: (1)正弦图像是蓝色曲线,余弦图像是红色曲线,线条宽度为2.5: (2)标题为:"正/ ...
- 【opencv450】 图像相减、二值化、阈值分割
原始图像: 灰度图像相减: cv::threshold(dif2, threshold1, value, 255, THRESH_BINARY): cv::threshold(dif2, thresh ...
- matlab 二值化图像反色,图像处理——灰度化、二值化、反色、饱和度、对比度...
RGB RGB色彩模式使用RGB模型为图像中每个像素的RGB分量分配一个0~255范围内的强度值.RGB图像仅仅使用三种颜色,R(red).G(green).B(blue),就能够使它们依照不同的比例 ...
最新文章
- postgresql GUC 参数
- 《Excel 职场手册:260招菜鸟变达人》一第 14 招 利用数据验证记录数据录入时间...
- 回顾inputstream和outputstream
- Normal Bayes 分类器过程详解
- 看了蚂蚁金服的布局,你或能明白马云为何一定要将支付宝独立了!
- 启动mongodb服务器时发生系统错误5,CentOS 7系统下SELinux阻止MongoDB启动的问题详解...
- 深度解说阿里云 Serverless Kubernetes
- AcWing323. 战略游戏(树形DP)题解
- apache comments io包IOUtils方法简单介绍
- Pangolin-最好的SQL注入工具
- 汽车故障诊断技术【11】
- 创业公司一年工作总结!
- 制作OpenStack xpsp3镜像
- 用清除cookies的方式实现防止重复投票,值得收藏学习!
- 指纹测试天赋测试软件,指纹也能测天赋 10分钟出结果(图)
- linux的批处理文件怎么写,Linux下批处理文件编写
- js中判断一个对象是否存在
- A16Z和去中心化金融大佬们在伯克利都讲了什么?|创业者说
- 【LOJ6436】【PKUSC2018】神仙的游戏(NTT)
- 电脑接通电源时不能睡眠休眠问题解决