Я начал редактировать код RaspiStillYUV.c. В конечном итоге я хочу обработать изображение, которое я получаю, но сейчас я просто работаю, чтобы понять это. Почему я работаю с YUV вместо RGB? Поэтому я могу узнать что-то новое. Я внес незначительные изменения в функцию camera_buffer_callback
. Все, что я делаю это следующее:Дополнительные байты на конце буфера YUV - RaspberryPi
fprintf(stderr, "GREAT SUCCESS! %d\n", buffer->length);
Линия это замена:
Теперь размеры должны быть 2592 x 1944
(Ш х В), как в коде. Отключение Википедии (YUV420) Я пришел к выводу, что размер файла должен быть w * h * 1.5
. Поскольку компонент Y имеет 1 байт данных для каждого пикселя, а компоненты U и V имеют 1 байт данных для каждых 4 пикселей (1 + 1/4 + 1/4 = 1.5)
. Отлично. Выполнение математических операций в Python:
>>> 2592 * 1944 * 1.5
7558272.0
К сожалению, это не совпадает с выходом моей программы:
GREAT SUCCESS! 7589376
Это оставляет разницу 31104
байтов.
Я полагаю, что буфер выделяется в куски фиксированного размера (размер вывода равномерно делится на 512). Хотя я хотел бы понять эту тайну, я в порядке с объяснением размера фиксированного размера.
Мой вопрос: если я что-то упустил. Являются ли дополнительные байты за ожидаемым размером значимыми в этом формате? Следует ли их игнорировать? Вычет моих расчетов?
Общепринято, что буферы yuv имеют неиспользуемые конечные байты, но я не знаю подробных сведений о малине. –
Для других людей, рассматривающих это. Я переключился на SimpleCV и Python. Мой (не слишком сильно) модифицированный код RaspiStillYUV выполнял около 10 изображений за 8 секунд. SimpleCV делает ~ 7 в секунду. Оба образца взяты без дополнительной обработки. Вы можете использовать драйвер uv4l, чтобы получить камеру в качестве видеоустройства, чтобы использовать ее с SimpleCV. – douggard