Различное качество изображения от захвата Picamera к массиву и пути

8

Качество захвата с Пи Камер варьируется при захвате в массив и при прямом захвате на путь. Первый имеет более розоватый оттенок, чем последний.

Это почему.?
Код, который я использовал для захвата изображений:

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

Время, затрачиваемое на захват изображения в массив numpy, вдвое меньше, чем при прямом захвате. Итак, это связано с снятием шума с изображения?

Изображение, записанное в массив: 0,71 с Изображение, записанное в путь: 1,52 сИзображение захвачено в массив

Изображение захвачено в путь

harshatech2012
источник
Поставьте время срабатывания для numpy после записи. Тогда вы действительно можете сравнить. Мне любопытно
Jaromrax
@jaromrax Это увеличивает время срабатывания примерно до 0,925 сек. Но это все же меньше, чем для захвата пути.
harshatech2012
Может ли это быть проблема сжатия? Например, возможно, cv2 не использует фильтрацию, а Picamera использует. Каковы размеры выходных файлов? Вы можете проверить с du normal_capture.pngиdu array_capture.png
Хантер Акинс

Ответы:

1

Согласно Документации Picamera в части 3.5 раздела основных рецептов:

Вы можете сделать снимок последовательности изображений, которые выглядят одинаково с точки зрения яркости, цвета и контраста (например, это может быть полезно при съемке с интервальной съемкой). Для обеспечения согласованности нескольких снимков необходимо использовать различные атрибуты. В частности, вам необходимо убедиться, что время экспозиции камеры, баланс белого и усиление зафиксированы:

Чтобы зафиксировать время экспозиции, установите для shutter_speedатрибута разумное значение. При желании можно установить isoфиксированное значение. Чтобы зафиксировать усиление экспозиции, разрешите analog_gainи digital_gainустановите разумные значения, затем установите для параметра многоквартирный режим значение 'off'. Для того, чтобы исправить баланс белого, установите awb_modeдля 'off', а затем установить awb_gainsна (красный, синий) кортеж прибыли.

Может быть трудно узнать, какие подходящие значения могут быть для этих атрибутов. Для iso, простое правило заключается в том , что 100 и 200 являются разумные значения для дневного времени, в то время как 400 и 800 лучше для низкой освещенности. Чтобы определить разумное значение, shutter_speedвы можете запросить exposure_speedатрибут. Для увеличения экспозиции обычно достаточно подождать, пока значение не analog_gainстанет больше 1, прежде чем exposure_modeбудет установлено значение 'off'. Наконец, чтобы определить разумные значения, awb_gains просто запросите свойство, в то время как для awb_modeнего задано нечто иное, чем 'off'. Опять же, это скажет вам усиление баланса белого камеры, как определено алгоритмом автоматического баланса белого.

Следующий скрипт предоставляет краткий пример настройки этих параметров:

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)])
Matt
источник