W OpenCV (Python), dlaczego otrzymuję 3 obrazy kanałów z obrazu w skali szarości?

Używam Pythona (2.7) i powiązań dla OpenCV 2.4.6 w Ubuntu 12.04

Wczytuję obraz

    image = cv2.imread('image.jpg')

Następnie sprawdzam kształt tablicy obrazów

    print image.shape

Dostaję (480, 640, 3), których oczekuję na kolorowy obraz 640x480. Następnie konwertuję obraz do skali szarości i ponownie sprawdzam kształt.

    gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    print gray_image.shape

Dostaję (480, 640, 1), którego oczekuję za 640x480skala szarości obraz. Następnie zapisuję obraz:

    cv2.imwrite('gray.jpg', gray_image)

Jestem na Linuksie, więc spróbowałem spojrzeć na obraz za pomocą gThumb, który pokazuje wszystkie kanały kolorów. Kiedy przywracam szary obraz do OpenCV, obraz ma ponownie trzy kanały. Mam świadomość tej flagi do czytania obrazów:

    CV_LOAD_IMAGE_GRAYSCALE - If set, always convert image to the grayscale one

Ale brzmi to tak, jakby miało przynieść obraz jako kolorowy obraz, a następnie przekonwertować go. Przenoszę ten projekt do RaspberryPi, więc nie chcę, aby zdarzały się niepotrzebne operacje.

EDYCJA: Wykonałem kilka kontroli czasu i odkryłem, że ładowanie obrazu przy użyciu flagi CV_LOAD_IMAGE_GRAYSCALE powoduje, że ładowanie obrazu jest dwa razy szybsze, niezależnie od wejścia obrazu.

     Using a 3072 x 4608 x 3 image
     0.196774959564 seconds with default loading
     0.0931899547577 seconds with CV_LOAD_IMAGE_GRAYSCALE

Problem polega na tym, że OpenCV tworzy 3-kanałowe wyjście JPG, niezależnie od tego, czy mam matrycę obrazu w skali szarości, czy nie!

Jakiej innej aplikacji mogę użyć, aby uzyskać pojedynczy obraz JPG z 8-bitowym kanałem? (Być może gThumb niepoprawnie zgłasza kanały).

Jeśli obraz nie jest pojedynczym kanałem, dlaczego OpenCV zapisuje mój obraz w skali szarości do obrazu 3-kanałowego na dysku?

Z góry dziękuję.

questionAnswers(3)

yourAnswerToTheQuestion