在Python中仅使用矩阵(无BGR2GRAY函数)将图像转换为灰度

时间:2018-03-05 17:40:11

标签: python image matrix grayscale

我试图在不使用OpenCV或Numpy的情况下将图像转换为灰度 示例: 我的图像矩阵是

.forSpreadsheet(SpreadsheetApp.getActive())
.forSpreadsheet(SpreadsheetApp.getActiveSpreadsheet())

使用cv2.COLOR_BGR2GRAY函数,矩阵为:

    [[[116 116 117]
  [115 115 116]
  [117 115 115]
  ..., 
  [135 138 142]
  [137 139 139]
  [137 139 139]]

 [[116 116 116]
  [116 116 116]
  [114 116 116]
  ..., 
  [135 139 140]
  [135 137 138]
  [135 137 138]]

 [[115 118 114]
  [115 118 114]
  [112 116 115]
  ..., 
  [132 141 141]
  [134 137 141]
  [133 136 140]]

 ..., 
 [[ 35  44 163]
  [ 31  40 159]
  [ 10  33 158]
  ..., 
  [ 14  48  53]
  [ 24  56  55]
  [ 27  59  58]]

 [[ 24  38 156]
  [ 19  33 151]
  [  7  28 145]
  ..., 
  [ 25  55  66]
  [ 15  59  61]
  [ 17  61  63]]

 [[  0  27 131]
  [  0  26 130]
  [  0  34 113]
  ..., 
  [ 11  39  55]
  [  6  28  56]
  [  4  26  54]]]

首先,当我给出108时,我不知道为什么它会返回36个整数,我怎么能手动完成呢?

感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

问题1

你得到36个整数而不是108个,因为原始图像有3个通道(红色,绿色,蓝色,a.k.a RGB)。将其转换为灰度时,您将其展平为仅一个通道。 108 / 3 = 36,似乎是合法的!

问题2

手动转换:有多种方法可以将RGB图像转换为灰度,但最直接的方法是采用三个通道的平均值,基本上是(red_values + green_values + blue values) / 3。所以拍摄原始图像数组,然后运行:

gray_image = (image[:,:,0] + image[:,:,1] + image[:,:,2]) / 3

以上假设您的图像阵列采用image.shape = (pixel_height, pixel_width, number_of_channels)形式,前3个通道代表您的R,G和B通道,但这是相当标准的