"image[:, :, 1]" 和 "cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)" 有什么区别?
What's the difference between "image[:, :, 1]" and "cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)"?
提供这张图片:
如果我们这样做 image[:, :, 1]
,我们会看到:
同时进行 cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
:
它们略有不同,但只是略有不同。
使用数组访问 [:, :, 1]
而不是 cv2.cvtColor()
调用有什么具体原因吗?
实际上,[:, :, 1]
到底是做什么的?能简单解释一下吗?
我的最终目的是从一些图像中提取文本。我应该坚持两种解释的方法中的一些吗?还是应该完全一样?
[:, :, 1]
是红绿蓝的表示,所以只是rgb(0, 0, 1)
的另一种说法。
另一方面,cv2.cvtColor()
也是颜色空间的变化,但是使用 cv2.COLOR_BGR2GRAY
作为参数,您实际上使用的是灰度。
如果您使用 OpenCV 加载图像,image[:,:,0]
将是蓝色通道,image[:,:,1]
将是绿色通道,image[:,:,2]
将是红色通道。我是说 OpenCV 使用 BGR
排序。
如果您使用 PIL/Pillow 或几乎任何其他模块打开图像,image[:,:,0]
将是红色通道,image[:,:,1]
将是绿色通道和 image[:,:,2]
将是蓝色通道。我是说世界其他地方使用 RGB
排序。
现在,看看红色铅笔,它在红色通道中是亮白色的,因为里面有很多红色。看蓝色铅笔,它在蓝色通道中是亮白色的。看绿色铅笔,在绿色通道里会是亮白色
如果您转换为灰度,红色、绿色和蓝色通道会按特定百分比混合,而不是全部单独选择:
grey = 0.30*R + 0.59*G + 0.11*B
因此,如果您使用 cvtColor(...,BGR2GRAY)
,绿色将显示为最亮(因为它们具有更大的权重),然后是红色,而蓝色将是最暗的。
提供这张图片:
如果我们这样做 image[:, :, 1]
,我们会看到:
同时进行 cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
:
它们略有不同,但只是略有不同。
使用数组访问 [:, :, 1]
而不是 cv2.cvtColor()
调用有什么具体原因吗?
实际上,[:, :, 1]
到底是做什么的?能简单解释一下吗?
我的最终目的是从一些图像中提取文本。我应该坚持两种解释的方法中的一些吗?还是应该完全一样?
[:, :, 1]
是红绿蓝的表示,所以只是rgb(0, 0, 1)
的另一种说法。
另一方面,cv2.cvtColor()
也是颜色空间的变化,但是使用 cv2.COLOR_BGR2GRAY
作为参数,您实际上使用的是灰度。
如果您使用 OpenCV 加载图像,image[:,:,0]
将是蓝色通道,image[:,:,1]
将是绿色通道,image[:,:,2]
将是红色通道。我是说 OpenCV 使用 BGR
排序。
如果您使用 PIL/Pillow 或几乎任何其他模块打开图像,image[:,:,0]
将是红色通道,image[:,:,1]
将是绿色通道和 image[:,:,2]
将是蓝色通道。我是说世界其他地方使用 RGB
排序。
现在,看看红色铅笔,它在红色通道中是亮白色的,因为里面有很多红色。看蓝色铅笔,它在蓝色通道中是亮白色的。看绿色铅笔,在绿色通道里会是亮白色
如果您转换为灰度,红色、绿色和蓝色通道会按特定百分比混合,而不是全部单独选择:
grey = 0.30*R + 0.59*G + 0.11*B
因此,如果您使用 cvtColor(...,BGR2GRAY)
,绿色将显示为最亮(因为它们具有更大的权重),然后是红色,而蓝色将是最暗的。