我在 Ubuntu 12.04 上使用 Python (2.7) 和 OpenCV 2.4.6 的绑定
我加载图像
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)
我在 linux 上,所以我尝试使用 gThumb 查看图像,它显示了所有颜色通道。当我将灰色图像带回 OpenCV 时,图像再次具有三个通道。我知道这个用于读取图像的标志:
CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
但这听起来像是要将图像作为彩色图像引入,然后进行转换。我正在将此项目移植到 RaspberryPi,因此我不希望发生不必要的操作。
编辑:我做了一些时间检查,我发现使用 CV_LOAD_IMAGE_GRAYSCALE 标志集加载图像会导致图像加载速度提高两倍,而与图像输入无关。
Using a 3072 x 4608 x 3 image
0.196774959564 seconds with default loading
0.0931899547577 seconds with CV_LOAD_IMAGE_GRAYSCALE
问题似乎是 OpenCV 正在创建一个 3 通道 JPG 输出,无论我是否有灰度图像矩阵!
我可以使用什么其他应用程序来确保我得到一个 8 位通道的 JPG 图像?(也许 gThumb 错误地报告了频道)。
如果图像不是单通道,为什么 OpenCV 在磁盘写入时将我的灰度图像保存为 3 通道图像?
提前致谢。