目录
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 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')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)