Warum erhalte ich in OpenCV (Python) 3-Kanal-Bilder von einem Graustufenbild?

Ich verwende Python (2.7) und Bindings für OpenCV 2.4.6 unter Ubuntu 12.04

Ich lade ein Bild

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

Ich überprüfe dann die Form des Bildarrays

    print image.shape

Ich bekomme (480, 640, 3), was ich für ein 640x480 Farbbild erwarte. Ich konvertiere dann das Bild in Graustufen und überprüfe die Form erneut.

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

Ich bekomme (480, 640, 1), was ich für eine 640x480 erwarteGraustufen Bild. Ich speichere dann das Bild:

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

Ich bin auf Linux, also habe ich versucht, das Bild mit gThumb zu betrachten, das alle Farbkanäle zeigt. Wenn ich das graue Bild wieder in OpenCV bringe, hat das Bild wieder drei Kanäle. Mir ist diese Flagge zum Lesen von Bildern bekannt:

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

Aber das klingt so, als würde es das Bild in Farbe bringen und es dann konvertieren. Ich portiere dieses Projekt auf RaspberryPi, damit keine unnötigen Operationen stattfinden.

BEARBEITEN: Ich habe einige Zeitüberprüfungen durchgeführt und festgestellt, dass das Laden eines Bildes mit dem Flag CV_LOAD_IMAGE_GRAYSCALE das Bild unabhängig von der Bildeingabe doppelt so schnell lädt.

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

Das Problem scheint zu sein, dass OpenCV eine 3-Kanal-JPG-Ausgabe erstellt, unabhängig davon, ob ich eine Graustufen-Bildmatrix habe oder nicht!

Mit welcher anderen App kann ich sicherstellen, dass ein einzelnes 8-Bit-Kanal-JPG-Bild ausgegeben wird? (Möglicherweise meldet gThumb die Kanäle falsch).

Wenn das Bild kein einzelner Kanal ist, warum speichert OpenCV mein Graustufenbild beim Schreiben auf die Festplatte in einem 3-Kanal-Bild?

Danke im Voraus.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage