图像的灰度化、二值化

目录

         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。

如下面几个常用的颜色真彩值:

颜色名称RGB
黑色000
蓝色00255
绿色02550
红色25500
黄色2552550
白色255255255

2、灰度化

什么叫图片的灰度化呢?灰度化就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B (就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等,“=”的意思不是程序语言中的赋值,是数学中的相等) 此时的这个值叫做灰度值。

图像灰度化常用的算法:

算法名实现
Rec601Luma0.298839R' + 0.586811G'+ 0.114350B'
Rec601Luminance0.298839R + 0.586811G + 0.114350B
Rec709Luma0.212656R' + 0.715158G' + 0.072186B'
Rec709Luminance0.212656R + 0.715158G + 0.072186B
Brightnessmax(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
RMSsqrt( (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 cv

img = 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')

  • 7
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值