在OpenCV(Python)中,为什么我从灰度图像中获得了3通道的图像?
在OpenCV(Python)中,为什么我从灰度图像中获得了3通道的图像?
我正在使用Python (2.7)和OpenCV 2.4.6的绑定在Ubuntu 12.04上。
我加载了一张图片。
image = cv2.imread('image.jpg')
然后我检查图片数组的形状。
print image.shape
我得到的结果是(480, 640, 3),这是我预期的640x480的彩色图片的形状。然后,我将图片转换为灰度图并再次检查形状。
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) print gray_image.shape
我得到的结果是(480, 640, 1),这是我预期的640x480的灰度图片的形状。然后,我保存了这张图片。
cv2.imwrite('gray.jpg', gray_image)
我使用gThumb在Linux上查看这张图片,它显示了所有的彩色通道。当我将灰度图再次导入OpenCV时,图片又变成了三通道的。
我知道有一个标志可以用来读取图片:
CV_LOAD_IMAGE_GRAYSCALE - 如果设置,始终将图片转换为灰度图
但这听起来像是将图片作为彩色图片导入然后再转换。我正在将这个项目移植到RaspberryPi上,所以我不希望发生不必要的操作。
编辑:我进行了一些时间检查,发现使用CV_LOAD_IMAGE_GRAYSCALE标志加载图片的速度是默认加载的两倍,不管输入的图片是什么。
使用一个3072 x 4608 x 3的图片 默认加载花费0.196774959564秒 使用CV_LOAD_IMAGE_GRAYSCALE花费0.0931899547577秒
问题似乎是OpenCV无论我有没有灰度图片矩阵,都会创建一个三通道的JPG输出!
我可以使用哪个其他应用程序来确保我得到的是一个单通道的8位JPG图片?
(也许gThumb的通道报告有误)。
如果图片不是单通道的,为什么OpenCV在写入磁盘时将我的灰度图片保存为三通道的图片?