Я использую 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, поэтому я не хочу, чтобы произошли ненужные действия.
EDIT: Я проверил некоторые проверки времени, и я обнаружил, что загрузка изображения с использованием флага 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-канальное изображение на диске?
Спасибо заранее.