在 Python 中仅使用矩阵(无 BGR2GRAY 函数)将图像转换为灰度
Convert an image to grayscale using only matrix (No BGR2GRAY function) in Python
我正在尝试在不使用 OpenCV 或 Numpy 的情况下将图像转换为灰度
例子 :
我图像的矩阵是
[[[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]]]
使用 cv2.COLOR_BGR2GRAY 函数矩阵为:
[[150 150 150 ..., 150 150 150]
[150 173 175 ..., 97 91 89]
[150 176 179 ..., 95 89 82]
...,
[150 66 67 ..., 152 154 152]
[150 62 59 ..., 152 152 152]
[150 62 64 ..., 155 154 151]]
首先,我不明白为什么 returns 当我给出 108 时它是 36 个整数,我该如何手动完成
感谢您的帮助:)
问题一
您得到 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 通道,但这是非常标准的
我正在尝试在不使用 OpenCV 或 Numpy 的情况下将图像转换为灰度 例子 : 我图像的矩阵是
[[[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]]]
使用 cv2.COLOR_BGR2GRAY 函数矩阵为:
[[150 150 150 ..., 150 150 150]
[150 173 175 ..., 97 91 89]
[150 176 179 ..., 95 89 82]
...,
[150 66 67 ..., 152 154 152]
[150 62 59 ..., 152 152 152]
[150 62 64 ..., 155 154 151]]
首先,我不明白为什么 returns 当我给出 108 时它是 36 个整数,我该如何手动完成
感谢您的帮助:)
问题一
您得到 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 通道,但这是非常标准的