图像灰度化的算法主要有以下3种:
1)最大值法:使转化后的R,G,B得值等于转化前3个值中最大的一个,即:
R=G=B=max(R,G,B) (1)
这种方法转换的灰度图亮度很高。
代码实现:
import cv2.cv as cv
image = cv.LoadImage('11.jpg')
grayimg = cv.CreateImage(cv.GetSize(image), image.depth, 1) #第一个参数为图片的宽度和高度,即size(width,height),第二个参数为图片的像素位深度depth,最后一个参数为图像的channel
for i in range(image.height):
for j in range(image.width):
grayimg[i,j] = max(image[i,j][0], image[i,j][1], image[i,j][2])
cv.ShowImage('srcImage', image)
cv.ShowImage('grayImage', grayimg)
cv.WaitKey(0)
2)平均值法:是转化后R,G,B的值为转化前R,G,B的平均值。即:
R=G=B=(R+G+B)/3 (2)
这种方法产生的灰度图像比较柔和。
代码实现:
import cv2.cv as cv
image = cv.LoadImage('11.jpg')
grayimg = cv.CreateImage(cv.GetSize(image), image.depth, 1)
for i in range(image.height):
for j in range(image.width):
grayimg[i,j] = (image[i,j][0] + image[i,j][1] + image[i,j][2])/3
cv.ShowImage('srcImage', image)
cv.ShowImage('grayImage', grayimg)
cv.WaitKey(0)
3)加权平均值法:按照一定权值,对R,G,B的值加权平均,即:
(3)
分别为R,G,B的权值,取不同的值形成不同的灰度图像。由于人眼对绿色最为敏感,红色次之,对蓝色的敏感性最低,因此一般情况下,
得到的灰度图像效果最好。
代码实现:
import cv2.cv as cv
image = cv.LoadImage('11.jpg')
grayimg = cv.CreateImage(cv.GetSize(image), image.depth, 1)
for i in range(image.height):
for j in range(image.width):
grayimg[i,j] = 0.3 * image[i,j][0] + 0.11 * image[i,j][1] + 0.59 * image[i,j][2]
cv.ShowImage('srcImage', image)
cv.ShowImage('grayImage', grayimg)
cv.WaitKey(0)