我在Ubuntu12.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 灰度图像,我希望得到(480,640,1)。然后我保存图像:
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通道图像?
提前谢谢。
https://stackoverflow.com/questions/18870603
复制相似问题