Diferente calidad de imagen desde la captura de picamera hasta la matriz y la ruta numpy

8

La calidad de captura de la cámara Pi varía cuando se captura en una matriz numpy y cuando se captura directamente en una ruta. El primero tiene un tinte más rosado que el segundo.

Porqué es eso.?
El código que usé para capturar las imágenes:

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))

El tiempo necesario para capturar la imagen en una matriz numpy es la mitad del de la captura de ruta directa. Entonces, ¿está relacionado con la eliminación de ruido de la imagen?

Imagen capturada en una matriz numpy: 0,71 segundos Imagen capturada en una ruta: 1,52 segundosImagen capturada en una matriz numpy

Imagen capturada en un camino

harshatech2012
fuente
Ponga tiempo de activación para numpy después de escribir. Entonces realmente puedes comparar. Tengo curiosidad
jaromrax
@jaromrax Hacer esto aumenta el tiempo de activación a alrededor de 0.925 segundos. Pero todavía es menos que eso para la captura del camino.
harshatech2012
¿Podría ser un problema de compresión? Por ejemplo, quizás cv2 no usa filtrado pero picamera sí. ¿Cuáles son los tamaños de los archivos de salida? Puedes consultar con du normal_capture.pngydu array_capture.png
Hunter Akins

Respuestas:

1

De acuerdo con la documentación de Picamera en la parte 3.5 de la sección de recetas básicas:

Es posible que desee capturar una secuencia de imágenes que tengan el mismo aspecto en términos de brillo, color y contraste (esto puede ser útil en la fotografía timelapse, por ejemplo). Se deben utilizar varios atributos para garantizar la coherencia en varias tomas. Específicamente, debe asegurarse de que el tiempo de exposición de la cámara, el balance de blancos y las ganancias sean fijos:

Para fijar el tiempo de exposición, establezca el shutter_speedatributo en un valor razonable. Opcionalmente, establezca isoun valor fijo. Para arreglar las ganancias de exposición, deje analog_gainy digital_gainestablezca valores razonables, luego establezca exposición_modo en 'off'. Para arreglar el balance de blancos, configure el awb_modea 'off', luego establezca awb_gainsuna tupla de ganancias (roja, azul).

Puede ser difícil saber qué valores apropiados podrían ser para estos atributos. Para iso, una regla general simple es que 100 y 200 son valores razonables para el día, mientras que 400 y 800 son mejores para poca luz. Para determinar un valor razonable para shutter_speedusted, puede consultar el exposure_speedatributo. Para analog_gainaumentar la exposición, generalmente es suficiente esperar hasta que sea ​​mayor que 1 antes de exposure_modeconfigurarlo 'off'. Finalmente, para determinar valores razonables para awb_gains simplemente consultar la propiedad mientras awb_modese establece en algo diferente a 'off'. Nuevamente, esto le indicará las ganancias de balance de blancos de la cámara según lo determinado por el algoritmo de balance de blancos automático.

El siguiente script proporciona un breve ejemplo de configuración de estos ajustes:

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)])
Mate
fuente