彩色图片(RGB)转灰度图片
一、知识简介
RGB彩色图像在计算机中是使用R、G、B三个矩阵来存储红、绿、蓝三个颜色值。灰度图则是采用一个矩阵来存储灰度值(亮度,灰度值0表示亮度为0,看起来是黑色,同理灰度值1表示最亮,看起来是白色)
二、彩色图片(RGB)转灰度图片原理
对于彩色转灰度,有一个很著名的心理学公式:
Gray = R * 0.299 + G * 0.587 + B * 0.114
其中权值可以根据实际应用进行修改
三、python实现
要点:图片计算格式 如果是浮点型 像素点的取值范围(0,1),创建画布的时候矩阵的类型就是float型
图片计算格式 如果是整型(uint8) 像素点的取值范围(0,255),创建画布的时候矩阵的类型就是uint8型
import cv2
import numpy as np
img = cv2.imread('image0.jpg',1)
def RGB2Gray1(img):
'''
:param img: RGB 图
:return: 灰度图(0,1)
方法一:
对于彩色转灰度,有一个很著名的心理学公式:
Gray = B*0.114 + G*0.587 + R*0.299
'''
imgInfo = img.shape
gray = np.zeros((imgInfo[0], imgInfo[1])) # gray.dtype 为 float64
for i in range(imgInfo[0]):
for j in range(imgInfo[1]):
gray[i][j] = (img[i][j][0]*0.114 + img[i][j][1]*0.587 + img[i][j][2]*0.299)/255
cv2.imshow('image2gray', gray)
cv2.waitKey(0)
# RGB2Gray1(img)
def RGB2Gray2(img):
'''
:param img: RGB 图
:return: 灰度图(0,255)
方法一:
对于彩色转灰度,有一个很著名的心理学公式:
Gray = B*0.114 + G*0.587 + R*0.299
'''
imgInfo = img.shape
gray = np.zeros((imgInfo[0], imgInfo[1]),dtype=np.uint8) # gray.dtype 为 uint8 # 创建矩阵来保存变换后的图片
gray.astype(int)
for i in range(imgInfo[0]):
for j in range(imgInfo[1]):
gray[i][j] = img[i][j][0]*0.114 + img[i][j][1]*0.587 + img[i][j][2]*0.299
# print(gray)
cv2.imshow('image2gray', gray)
cv2.waitKey(0)
# RGB2Gray2(img)
def RGB2Gray3(img):
'''
:param img: RGB 图
:return: 灰度图(0,255)
方法一:
对于彩色转灰度,有一个很著名的心理学公式:
Gray = B*0.114 + G*0.587 + R*0.299
而实际应用时,希望避免低速的浮点运算,所以需要整数算法。注意到系数都是 3 位精度的没有,我们可以将它们缩放 1000 倍来实现整数运算算法:
'''
imgInfo = img.shape
gray = np.zeros((imgInfo[0], imgInfo[1]),dtype=np.uint8) # gray.dtype 为 uint8
gray.astype(int)
for i in range(imgInfo[0]):
for j in range(imgInfo[1]):
gray[i][j] = (img[i][j][0]*114 + img[i][j][1]*587 + img[i][j][2]*299)/1000
# print(gray)
cv2.imshow('image2gray', gray)
cv2.waitKey(0)
RGB2Gray3(img)