首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Python中仅使用矩阵(没有BGR2GRAY函数)将图像转换为灰度

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

Stack Overflow用户
提问于 2018-03-05 17:40:11
回答 1查看 1.2K关注 0票数 0

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

代码语言:javascript
运行
复制
    [[[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函数,矩阵是:

代码语言:javascript
运行
复制
[[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]]

首先,我不明白为什么当我给出108个整数时,它会返回36个整数,以及如何手动执行

(谢谢你的帮助:)

EN

Stack Overflow用户

回答已采纳

发布于 2018-03-05 18:22:53

问题1

您得到的是36个整数,而不是108个整数,因为原始图像有3个通道(红色、绿色、蓝色,即RGB)。当您将其转换为灰度时,您只将其压平为一个通道。108 / 3 = 36,看起来是合法的!

Quesion 2

手工转换:有多种方法将RGB图像转换为灰度,但最简单的方法是取三个通道的平均值,基本上是(red_values + green_values + blue values) / 3。因此,以您的原始图像数组,并运行:

代码语言:javascript
运行
复制
gray_image = (image[:,:,0] + image[:,:,1] + image[:,:,2]) / 3

以上假设图像数组为image.shape = (pixel_height, pixel_width, number_of_channels)格式,前3个通道表示R、G和B通道,但这是相当标准的。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49116389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档