LINUX.ORG.RU

[python] 16-битный цвет в 32-битный цвет.

 


0

0

Видеокамера видна в userspace как девайс, выдающий пиксели глубиной цвета 16, закодированные так: BBBBBGGGGGGRRRRR.

Как раздербанить это число на три? ЯП: python, не обязательно органичиваться стандартной библиотекой.

Желательно еще чтобы не тормозило, т. к. поток данных приличный, а железка - слабенькая.

Поможете?

★★★★★

32 бита это A8R8G8B8, наверняка тебе нужно B5G6R5 перевести в R8G8B8.

На питоне такое сложно найти, проще переписать алгоритм с с++. В 3д движках он должен быть.

lester_dev ★★★★★
()
Ответ на: комментарий от lester_dev

Я не осиливаю битовые операции в питоне. Я так понимаю, что надо занулять ненужные биты и делать сдвиг? Но тогда как же это будет тормозить-то с питоновым резиновым интом...

t184256 ★★★★★
() автор топика

Опечатка в заголовке, 24-битный цвет.

t184256 ★★★★★
() автор топика
Ответ на: комментарий от t184256

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

vaulter
()

Не будет это бысро работать в питоне. Как и предлагалось выше - лучший выход сделать Python/C extension.

Alesh
()

Генерируй виндовый HiColor bmp, прицепляя в начало hardcoded - шапку (*). Потом передавай его какому-нибудь консольному конвертору через fork чтобы получить более православный формат. Еще можно посмотреть поддерживает ли tiff или tga 16-битный цвет если не хочется заморачиваться еретическим bmp.

(*) Т.к все параметры типа высоты, ширины и глубины цвета зафиксированы то шапку можно захардкодить.

Absurd ★★★
()
Ответ на: комментарий от Absurd

Если мне не изменяет память, в 16-битном .bmp на каждую RGB-составляющую пикселя отводится по 5 бит, т.е. пошаманить с маскосдвигами все равно придется.

mannaz
()
Ответ на: комментарий от Absurd

/me весь в шоке, у меня простенькое realtime распознавание образов, а тут 30 вызовов внешнего бинаря в секунду на слабеньком ARM процессоре.

t184256 ★★★★★
() автор топика
Ответ на: комментарий от t184256

>Хорошо-хорошо, стремящееся не тормозить по полчаса.

Полюбасу, непонятно чего ты добиваешься. Если ты пистоном будешь работать с большими битмапами попиксельно, то это по любому будет тормозить как аццкий песец, причем раздербанивание байта сдвигами займет один процент времени.

Absurd ★★★
()
Ответ на: комментарий от Absurd

>Полюбасу, непонятно чего ты добиваешься. Если ты пистоном будешь работать с большими битмапами попиксельно, то это по любому будет тормозить как аццкий песец, причем раздербанивание байта сдвигами займет один процент времени.

я как-то делал на .net через Lock() с прямым копированием пикселей, но все равно на 6000х3000 картинках тормозило феерически

lester_dev ★★★★★
()
Ответ на: комментарий от Absurd

Я выделяю 300 нужных мне пикселей и сравниваю с эталонными цветами алгоритмом «сумма модулей разности компонент».

Попробую, как скажется на проихводительности распаковывание данных через struct и выделение нужного битовым сдвигом. Эх, почему только нету в struct распаковки битов?..

t184256 ★★★★★
() автор топика
Ответ на: комментарий от t184256

/me весь в шоке, у меня простенькое realtime распознавание образов, а тут 30 вызовов внешнего бинаря в секунду на слабеньком ARM процессоре.

...и все это - на питоне? Да, месье знает толк.

bibi
()

Для работы с изображениями в python есть библиотечка PIL - http://www.pythonware.com/products/pil/ Умеет дофига всего, и, думаю, о скорости разрабы тоже позаботились. Посмотри, может окажется полезна.

Laz ★★★★★
()

Поставить libv4l и запускать твою софтину так:

LD_PRELOAD=/path/to/v4l2convert.so ./your-stuff

В your-stuff использовать V4L2_PIX_FMT_RGB32 (RGB + альфа, пустая).

mv ★★★★★
()
Ответ на: комментарий от t184256

/me весь в шоке, у меня простенькое realtime распознавание образов, а тут 30 вызовов внешнего бинаря в секунду на слабеньком ARM процессоре.

Нафиг тебе тогда цвета вообще? Используй слой яркости в V4L2_PIX_FMT_YUV420 или сразу V4L2_PIX_FMT_GREY.

mv ★★★★★
()
Ответ на: комментарий от bibi

Месье начинал с ноутбуком и не знал, во что это выльется. Вся система на питоне, состоит из 3х - 4х процессов, обменивающихся данными через udp и в одном месте через пайп. И да, теперь это все трамбую на ARM. И там не только видео много кушает(

t184256 ★★★★★
() автор топика
Ответ на: комментарий от mv

Прошу прощения, но моя китайская пластмассовая камера на GPIO и китайский пластмассовый модуль ядра к ней имеют что-то общее с v4l1? Жажду продолжения.

t184256 ★★★★★
() автор топика
Ответ на: комментарий от mv

Как зачем, я же написал, что сравниваю еще с пятью эталонными цветами.

t184256 ★★★★★
() автор топика
Ответ на: комментарий от t184256

Прошу прощения, но моя китайская пластмассовая камера на GPIO и китайский пластмассовый модуль ядра к ней имеют что-то общее с v4l1? Жажду продолжения.

Телепаты в отпуске, без лоботомии не могу знать, что у тебя там за камера.

Пиши сишный плагин для питона, который будет rgb16 в rgb32 конвертить.

mv ★★★★★
()
Ответ на: комментарий от mv

Камера мегадубовая, фиксированное разрешение, 16 бит, доступ - чтение из файла. К ней идет example код на плюсах, который тупо читает из камеры и пишет в 16-битный framebuffer. Работает. Только мне счастья не прибавляет, т.к. моя софтина юзает v4l2 через opencv, от которого теперь хочу избавиться. И вот единственное мешающее - цвета.

Кстати, может ты в курсе - что делает v4l1-compat.ko и как его юзать?

t184256 ★★★★★
() автор топика
Ответ на: комментарий от t184256

Камера мегадубовая, фиксированное разрешение, 16 бит, доступ - чтение из файла. К ней идет example код на плюсах, который тупо читает из камеры и пишет в 16-битный framebuffer. Работает. Только мне счастья не прибавляет, т.к. моя софтина юзает v4l2 через opencv, от которого теперь хочу избавиться. И вот единственное мешающее - цвета.

Так хоть какой-нибудь Video4Linux есть или нет? 1-й, 2-й - неважно.

Кстати, может ты в курсе - что делает v4l1-compat.ko и как его юзать?

.ko или .so?

mv ★★★★★
()
Ответ на: комментарий от t184256

Ну правда нету.

Ну тогда не парься и напиши плагин на Си, который в 32-битном цвете отдавать будет. Можно даже с векторными операциями для пущей скорости замутить, если они в твоём арме есть.

.ko, модуль ядерный. просто так не modprob'ится, интересно, а в доки лезть лень.

В /var/log/messages посмотри, что ему не нравится. Исходя из названия, похоже, что мапит v4l1 вызовы на v4l2 (для софта, который v4l2 не умеет).

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.