Различное качество изображения от захвата 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 сИзображение захвачено в массив

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


Поставьте время срабатывания для 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)])
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.