三种灰度化效果不同,我们根据实际需要选择,但一般使用加权平均方法。

1.加权平均值法

        根据我们人类大量的实验,我们发现白色是由大概0.299的红色,0.587的绿色,0.114的蓝色混合而成的,因此最常用的灰度变换公式如下:

        D=0.299\times R+0.587\times G+0.114\times B

        D表示像素点(x,y)经转换后的灰度值,R、G、B为该像素点的三个通道的分量。

代码如下:

import cv2  as cv  
import numpy as np
#读取图片
img = cv.imread("inpaint.png")
h =  img.shape[0]  #图片高
w =  img.shape[1]  #图片宽
#构造一个 与原图大小一样 的黑色图片
grayimg = np.zeros((h,w,3),np.uint8)
 
#灰度化
for i in range(h):  
    for j in range(w):  
        grayimg[i,j] = 0.3 * img[i,j][0] + 0.59 * img[i,j][1] +  0.11 * img[i,j][2]

cv.imshow("img", img)
cv.imshow("grayimg", grayimg)
 
cv.waitKey(0)  

现象如下:

2.取最大值法

        即将彩色图像中R、G、B三个分量中的最大值作为灰度图像的灰度值。

        D=max(R,G,B)

代码如下:

import cv2  as cv  
import numpy as np

img = cv.imread("inpaint.png")
h =  img.shape[0]
w =  img.shape[1]
grayimg = np.zeros((h,w,3),np.uint8)
 
for i in range(h):  
    for j in range(w):  
        grayimg[i,j] = max(img[i,j][0] , img[i,j][1] ,img[i,j][2]) 

cv.imshow("img", img)
cv.imshow("grayimg", grayimg)

cv.waitKey(0)  

3.平均值法

        即对三个颜色分量求平均值得到灰度值:

        D=(R+G+B)/3

代码如下:

import cv2  as cv  
import numpy as np

img = cv.imread("inpaint.png")
h =  img.shape[0]
w =  img.shape[1]
grayimg = np.zeros((h,w,3),np.uint8)
 
for i in range(h):  
    for j in range(w):  
        grayimg[i,j] = (img[i,j][0] + img[i,j][1] +img[i,j][2])/3 

cv.imshow("img", img)
cv.imshow("grayimg", grayimg)
 
cv.waitKey(0)  

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐