Qualité d'image différente de la capture de picamera à la matrice et au chemin numpy

8

La qualité de capture de la caméra Pi varie lorsqu'elle est capturée sur un réseau numpy et lorsqu'elle est capturée directement sur un chemin. Le premier a une teinte plus rosée que le dernier.

Pourquoi donc.?
Le code que j'ai utilisé pour capturer les images:

from picamera import PiCamera
import cv2
import time

camera = PiCamera()
camera.resolution = (1280, 720)
img = np.empty((720, 1280, 3), dtype=np.uint8)

start = time.time()
camera.capture(img, "bgr")
print("Trigger time: " + str(time.time() - start))
cv2.imwrite("array_capture.png", img)

start = time.time()
camera.capture("normal_capture.png")
print("Trigger time: " + str(time.time() - start))

Le temps nécessaire pour capturer l'image sur un tableau numpy est la moitié de celui de la capture directe du chemin. Alors, est-ce lié au débruitage de l'image.?

Image capturée dans un réseau numpy: 0,71 s Image capturée sur un chemin: 1,52 sImage capturée dans un tableau numpy

Image capturée sur un chemin

harshatech2012
la source
Mettez le temps de déclenchement pour numpy après l'écriture. Ensuite, vous pouvez vraiment comparer. Je suis curieux
jaromrax
@jaromrax Cela augmente le temps de déclenchement à environ 0,925 s. Mais c'est encore moins que cela pour la capture de chemin.
harshatech2012
Serait-ce un problème de compression? Par exemple, peut-être que cv2 n'utilise pas de filtrage, mais picamera le fait. Quelles sont les tailles des fichiers de sortie? Vous pouvez vérifier avec du normal_capture.pngetdu array_capture.png
Hunter Akins

Réponses:

1

Selon la documentation de Picamera dans la partie 3.5 de la section des recettes de base:

Vous souhaiterez peut-être capturer une séquence d'images qui se ressemblent toutes en termes de luminosité, de couleur et de contraste (cela peut être utile en photographie accélérée, par exemple). Divers attributs doivent être utilisés afin d'assurer la cohérence entre plusieurs prises de vue. Plus précisément, vous devez vous assurer que le temps d'exposition, la balance des blancs et les gains de l'appareil photo sont tous fixes:

Pour fixer le temps d'exposition, définissez l' shutter_speedattribut sur une valeur raisonnable. Vous pouvez éventuellement définir isoune valeur fixe. Pour fixer les gains d'exposition, laissez analog_gainet digital_gainréglez sur des valeurs raisonnables, puis définissez exposition_mode sur 'off'. Pour corriger la balance des blancs, définissez le awb_modesur 'off', puis définissez awb_gainssur un tuple (rouge, bleu) de gains.

Il peut être difficile de savoir quelles valeurs appropriées pourraient être pour ces attributs. Pour iso, une règle de base simple est que 100 et 200 sont des valeurs raisonnables pour la journée, tandis que 400 et 800 sont meilleurs pour une faible luminosité. Pour déterminer une valeur raisonnable, shutter_speedvous pouvez interroger l' exposure_speedattribut. Pour les gains d'exposition, il suffit généralement d'attendre une valeur analog_gainsupérieure à 1 avant de exposure_modedéfinir 'off'. Enfin, pour déterminer des valeurs raisonnables pour awb_gains simplement interroger la propriété while awb_modeest définie sur autre chose que 'off'. Encore une fois, cela vous indiquera les gains de balance des blancs de l'appareil photo tels que déterminés par l'algorithme de balance des blancs automatique.

Le script suivant fournit un bref exemple de configuration de ces paramètres:

from time import sleep
from picamera import PiCamera

camera = PiCamera(resolution=(1280, 720), framerate=30)
# Set ISO to the desired value
camera.iso = 100
# Wait for the automatic gain control to settle
sleep(2)
# Now fix the values
camera.shutter_speed = camera.exposure_speed
camera.exposure_mode = 'off'
g = camera.awb_gains
camera.awb_mode = 'off'
camera.awb_gains = g
# Finally, take several photos with the fixed settings
camera.capture_sequence(['image%02d.jpg' % i for i in range(10)])
Mat
la source