彩色图像是指每个像素由R、G、B分量构成的图像,其中R、G、B是由不同的灰度级来描述的。在一些情况下,由于彩色的图像颜色种类多,数据量较大,需要将彩色图像转化为灰度图像。
因为opencv的函数进行了一些更新,原有的一部分图像操作函数消失了,所以自己总结了一下灰度化的方式。
常用的彩色图像灰度化方法有以下三种:
(1)最大值法: 将彩色图像中的三分量亮度的最大值作为灰度图的灰度值。
(2)平均值法: 将彩色图像中的三分量亮度求平均得到一个灰度值。
(3)加权平均法: 根据重要性及其它指标,将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,因此,按下式对RGB三分量进行加权平均能得到较合理的灰度图像。
Y=0.3R+0.59G+0.11B
一.使用opencv进行灰度化
1.最大值法
代码实现:
import numpy as np
import cv2
# 最大值法 + cv2 进行灰度化
image = cv2.imread('car.jpg')
h, w = image.shape[:2]
gray_img = np.zeros((h, w), dtype=np.uint8) # 创建一个h行w列的二维list
for i in range(h):
for j in range(w):
gray_img[i, j] = max(image[i, j][0], image[i, j][1], image[i, j][2])
cv2.imshow("gray_image", gray_img)
cv2.imwrite("D:/Car_Identify/papers/gray_cv_max.jpg", gray_img)
cv2.waitKey(0)
2.平均值法
import numpy as np
import cv2
# 平均值法 + cv2 进行灰度化
image = cv2.imread('car.jpg')
h, w = image.shape[:2]
gray_img = np.zeros((h,w), dtype=np.uint8)
for i in range(h):
for j in range(w):
gray_img[i, j] = (int(image[i, j][0]) + int(image[i, j]<