任何颜色都有红、绿、蓝三原色组成,某点的颜色为RGB(R,G,B),那么,我们可以通过下面几种方法,将其转换为灰度: 
  1.浮点算法:Gray=R*0.3+G*0.59+B*0.11 
  2.整数方法:Gray=(R*30+G*59+B*11)/100 
  3.移位方法:Gray =(R*28+G*151+B*77)>>8; 
  4.平均值法:Gray=(R+G+B)/3; 
  5.仅取绿色:Gray=G; 
  通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。

代码:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

src=cv.imread('D:/pycharm/pycharmproject/test.jpg')

gray=np.array(src)
gray=gray[:,:,0]
new_color=np.array([gray,gray,gray])
new_color=np.transpose(new_color,(1,2,0))#矩阵维度交换
cv.imshow('new_color',new_color)
cv.waitKey(0)
cv.destroyAllWindows()