Страница 1 из 1

Отражение по горизонтали видеопотока с web камеры

Добавлено: 13 июл 2018, 20:06
Andrey Petrzhik
Добрый день!
У меня есть хитрая камера от микроскопа, которая очень крутая, но изображение гонит "отраженное" по горизонтали.
Как это выглядит, видно на приложенном принтскрине. Да, на бумажке должно отображаться "лента".
Есть ли какой-то простой способ в Vision and Motion отразить видеопоток по горизонтали... возможно как-то через ROI можно сделать?
Спасибо большое за помощь, сам нагуглить и сообразить что-то не смог пока...

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 13 июл 2018, 20:41
dadreamer
IMAQ Symmetry VI w/ Type of Symmetry = Vertical

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 13 июл 2018, 21:53
Andrey Petrzhik
Круто! Только у меня Labview 2012 + IMAQ 2012... и там вроде как такого нет.
Но я понял в какую сторону смотреть, спасибо!

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 13 июл 2018, 23:00
dadreamer
Andrey Petrzhik писал(а):Только у меня Labview 2012 + IMAQ 2012... и там вроде как такого нет.
Функция довольно старая, ещё в 2009-м Вижене была. Наверно, надо IMAQdx поставить, тогда появится. Ну, или можно картинку перегнать в массив, развернуть массив построчно и перегнать его обратно в картинку.

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 16 июл 2018, 19:46
Andrey Petrzhik
Странно, но такой функции у меня нет. Установлена Labview 12 и "NI Vision Acquisition Software August 2012", содержащий Ni IMAQdx 4.0.

Но фиг с ним. Перегоняю картинку в массив, потом кручу массив как вот тут: http://www.labview.ru/forum/viewtopic.php?p=16486 , и его опять в картинку. Но не работает - вылетает ошибка "Invalid image type". Что же не так?..

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 16 июл 2018, 20:56
dadreamer
Andrey Petrzhik писал(а):Но не работает - вылетает ошибка "Invalid image type". Что же не так?..
Если с чёрно-белой картинкой работаете, то брать надо выход Grayscale (U8), а не Float. Если же хотите с цветной RGB (U32) работать, то поменять надо формат у IMAQ Create, и далее пользовать ColorImageToArray / ArrayToColorImage. Ещё одну странность заметил - на IMAQ Create подаётся ссылка, а не строка, не знаю, насколько это будет критично в дальнейшем, но чтобы избежать багов, лучше присвоить картинке собственное уникальное имя.

Далее, операция разворота 2D-массива в принципе уже реализована. В пакете OpenG есть :vi: Reverse 2D Array, который выполняет это:
2018-07-16_22-53-56.jpg
2018-07-16_22-54-12.jpg
Можно воспользоваться кодом (вариант "By Columns") или поставить тулкит.

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 17 июл 2018, 19:28
Andrey Petrzhik
Ура, получилось! Ничего дополнительно не устанавливал. Кому интересно, файлик приложен. Вертит/отражает видеопоток с usb камер.

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 17 июл 2018, 19:55
dadreamer
Рад, что получилось.

А теперь - классика.
Caveats and Recommendations when Using Events in LabVIEW
Цикл While внутрь Эвент структуры помещать крайне не рекомендуется. Но! Следует Эвент структуру поместить в цикл While. А получение данных с камеры вынести вообще в отдельный цикл. Дело в том, что сейчас при текущей архитектуре событие нажатия кнопки Start обрабатывается однократно, а все последующие нажатия не могут быть обработаны, т.к. Эвент структура уже отработала и некому её перезапустить. В цикле While она бы крутилась постоянно и всегда могла бы обработать нажатия кнопок и прочее. Кроме того, запуская внутри Эвента цикл, мы не даём структуре возможность обработать прочие события, если они происходят, т.к. нужно ждать, пока отработает внутренний цикл. Стандартный подход - это выделять на все UI-события отдельный цикл с Эвент структурой, а всё остальное (работа с железом, логика, мат. операции) выполнять в каких-то других циклах. Посмотрите, например, шаблон State Machine / Автомат состояний, шаблон Producer-Consumer (Производитель-Потребитель) и т.д.

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 21 авг 2018, 14:09
Andrey Petrzhik
1.jpg
Всем привет. Появилась минутка, переделал предыдущий вариант. Вроде покрасивее стало... Поругайте кому не лень что не так пожалуйста. Завтра буду тестить на производстве, где есть одна вредная нестандартная камера, которая отваливалась работая с предыдущей программкой, обычно раз в 3-4 часа...

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 23 авг 2018, 12:56
Andrey Petrzhik
Отваливается всё равно:( Причём сама-то программка не виснет. Стоп-Старт и всё работает.
Как бы так научиться пинговать меняется/не меняется картинка, и если нет, закрывать/открывать сессию?..

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 23 авг 2018, 14:57
Artem.spb
Простое "=" массивов не проккатит?
Если каринка реальная, то всё равно небольшой дребезг цветов есть, а полное равенство очень подозрительно

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 23 авг 2018, 15:26
Andrey Petrzhik
Артём, в принципе я думал так сделать, но получается что когда темно (нет процесса в снимаемой камере), то картинка как была чёрная, так и есть чёрная. Но наверное можно попробовать... вдруг какая-то разница таки обнаружится...

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 23 авг 2018, 15:30
Artem.spb
Можно совсем чёрную исключать из проверки.

Re: Отражение по горизонтали видеопотока с web камеры

Добавлено: 24 авг 2018, 12:14
IvanLis
Andrey Petrzhik писал(а):Отваливается всё равно:( Причём сама-то программка не виснет. Стоп-Старт и всё работает.
Как бы так научиться пинговать меняется/не меняется картинка, и если нет, закрывать/открывать сессию?..
Артем правильно говорит, сейчас в основном все алгоритмы адаптивные, может получиться так, что даже если Вы одну и туже картинку прогоните через компрессию/декомпрессию, то результат будет отличаться.

Что касается сравнения кадров между собой....
Можете поиграться: http://www.ni.com/example/30554/en/

Для сравнения картинок можно использовать "интегральную дифференциальную яркость". Т.е. вы сначала вычисляете разницу между кадрами, потом модуль, затем сумму всех значений.
Потом в результате экспериментов получите порог принятия решения, до какого значения считать кадры равными, после которого - различными.
Только если Вы будите работать с RGB, то нужно отдельно каждую компоненту обрабатывать. По этому рекомендую либо взять самую информационную часть R, либо преобразовать предварительно в серое.

Последовательно идущие кадры должны отличаться между собой несильно, по этому рекомендую в буфере хранить например кадр 10 секундной давности. При 25fps это -250.