我在Ubuntu 12.04上使用Python(2.7)和OpenCV 2.4.6的绑定
我加载图像
image = cv2.imread('image.jpg')
然后我检查图像阵列的形状
print image.shape
我得到(480640,3),这是我对640x480彩色图像的期望。然后我将图像转换为灰度并再次检查形状。
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
print gray_image.shape
我得到(480640,1),这是我对640x480灰度图像的期望。然后保存图像:
cv2.imwrite('gray.jpg', gray_image)
我在linux上,所以我试着用gThumb查看图像,它显示了所有的颜色通道。当我将灰色图像带回OpenCV时,图像又有三个通道。 我知道这面阅读图片的旗帜:
CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one
但这听起来像是将图像作为彩色图像引入,然后将其转换。我将这个项目移植到覆盆子,所以我不想发生不必要的手术。
编辑:我做了一些定时检查,发现使用CV加载图像灰度标志集加载图像会导致图像加载速度提高两倍,而与图像输入无关。
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通道图像?
提前谢谢。
试试这个:
0表示灰色,1表示颜色
在openCV中,默认情况下读取jpg图像会得到3个通道的图像。所以我不确定你是否真的能从jpg文件中看到它已经灰度化了,但是你可以一直以灰度化的方式加载它。只有在图像事先没有灰度化的情况下,它才会带来问题,对于你的情况,我相信它不会起作用。所以简单的回答是:你不能将jpg保存为单通道图像。所以你需要在阅读或找出新的方法来判断图像是否灰度化后,再次将其灰度化。
您的代码是正确的,似乎
cv2.imread
使用三个通道加载图像,除非设置了CV_LOAD_IMAGE_GRAYSCALE
。现在,如果加载图像:
似乎您已将图像保存为BGR,但这不是真的,它只是opencv,默认情况下它使用3个通道读取图像,如果是灰度,则复制其层3次。如果使用scipy再次加载图像,您可以看到图像确实是灰度的:
因此,如果要加载灰度图像,需要设置
CV_LOAD_IMAGE_GRAYSCALE
标志:相关问题 更多 >
编程相关推荐