我想将任何图像转换为灰度,但我不明白这些实现之间的区别。
image = cv2.imread('lenna.jpg')
gray = cv2.cvtColor(image, cv2.IMREAD_GRAYSCALE)
gray1 = rgb2gray(image)
gray2 = cv2.imread('lenna.jpg', cv2.IMREAD_GRAYSCALE)
image1 = Image.open('lenna.jpg', 'r')
gray3 = image1.convert('L')
当我绘制它们时,我分别以蓝色、绿色、绿色和灰色显示它们。我什么时候应该使用每一个?
您已经遇到了 Python 类型系统无法像 C++ 那样保护您的情况。
cv2.IMREAD_GRAYSCALE
and cv2.COLOR_BGR2GRAY
值来自不同的枚举。前者的数值为0,适用于cv2.imread()
。后者的数值为6,适用于cv2.cvtColor()
。 C++ 会告诉你cv2.IMREAD_GRAYSCALE
无法传递给cv2.cvtColor()
。 Python悄悄地接受相应的int值。
这样,你think你要求 cv2 将彩色图像转换为灰色,但是通过传递cv2.IMREAD_GRAYSCALE
, cv2.cvtColor()
看到值 0,并认为您通过了cv2.COLOR_BGR2BGRA
。您将获得添加了 Alpha 通道的原始图像,而不是灰度图像。
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
是你所需要的。
假设您使用的是 Jupyter 笔记本,您看到的另一个问题是cv2
按 BGR 顺序而不是 RGB 顺序分层颜色平面。要正确显示它们,首先执行以下操作
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
然后显示结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)