Почему в 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)
Я нахожусь на 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-канальное изображение при записи на диск?
Заранее спасибо.