在OpenCV(Python)中,为什么我从灰度图像中获得了3通道的图像?

14 浏览
0 Comments

在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在写入磁盘时将我的灰度图片保存为三通道的图片?

0