提供此图像:
如果我们执行image[:, :, 1]
,则会看到:
在做cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
时:
它们略有不同,但略有不同。
使用数组访问[:, :, 1]
而不是cv2.cvtColor()
调用有什么特殊的原因吗?
实际上,[:, :, 1]
到底能做什么?您能用我更好理解的几句话来解释吗?
我的最终目的是从某些图像中提取文本。我应该坚持两种解释的方法吗?还是应该完全一样?
答案 0 :(得分:2)
[:, :, 1]
是红色绿色蓝色的表示,因此它只是rgb(0, 0, 1)
的另一种表达方式。
另一方面,cv2.cvtColor()
也是颜色空间的变化,但是实际上,使用cv2.COLOR_BGR2GRAY
作为参数,而是使用了灰度。
答案 1 :(得分:1)
如果您使用 OpenCV 加载了图像,则image[:,:,0]
将成为蓝色通道,image[:,:,1]
将成为绿色通道,image[:,:,2]
将成为红色通道。我说的是 OpenCV 使用BGR
排序。
如果使用 PIL / Pillow 或几乎其他任何模块打开图像,则image[:,:,0]
将是红色通道,image[:,:,1]
将是绿色通道,{{1 }}将成为蓝色频道。我是说世界其他地方使用image[:,:,2]
排序。
现在,看着红色的铅笔,在红色通道中它将变成亮白色,因为其中有很多红色。看一下蓝色铅笔,蓝色通道中它会变成亮白色。看看绿色的铅笔,在绿色通道中它将变成亮白色。
如果您转换为灰度,则红色,绿色和蓝色通道会以一定百分比混合,而不是全部选择:
RGB
因此,如果您使用grey = 0.30*R + 0.59*G + 0.11*B
,则绿色将显示最亮(因为它们的权重较大),则红色将显示最暗的颜色。