Imaqdx как сохранить в буфере несколько изображений

Создание приложений, библиотек, инсталляторов
S.G.
interested
interested
Сообщения: 5
Зарегистрирован: 24 июл 2023, 22:07
Версия LabVIEW: 20
Контактная информация:

Imaqdx как сохранить в буфере несколько изображений

Сообщение S.G. »

Доброго времени суток! Подскажите пожалуйста, всю голову сломал. Есть цикл, в котором я могу установить какое колличество кадров мне нужно сделать. Запускается при помощи программного триггера. Например мне нужно сделать три снимка , чтобы потом их сравнить. Проблема такая , что в буфере с каждым новым циклом , старый снимок стирается, а мне надо , чтобы он оставался , для дальнейшего сравнения с другими двумя снимками. Направьте , люди добрые на путь истинный, как можно это сделать, чтобы по завершению заданного колличества кадров ,они сохранялись в буфере, дальше запускался следующий цикл ,где эти изображения , я сравнил между собой? Полагаю что нужно в конце каждое изображение переделать в массив, но опять же сталкиваюсь с проблемой того что с каждым новым циклом (захватом изображения) предыдущий будет перезаписан.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3421
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 50 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение Artem.spb »

Изображение складируется в буфер.
Очевидным образом надо на каждой итерации выделят новый буфер.
Если количество шагов известно, то можно сразу выделить нужные буферы, и в цикле из по-очереди заполнять.
S.G. писал(а): 09 май 2024, 23:46 Полагаю что нужно в конце каждое изображение переделать в массив, но опять же сталкиваюсь с проблемой того что с каждым новым циклом (захватом изображения) предыдущий будет перезаписан.
А тут странное вы делаете, но без кода сложно сказать, что именно. Массив, если в него правильно "переделать" перезаписываться не будет.
S.G.
interested
interested
Сообщения: 5
Зарегистрирован: 24 июл 2023, 22:07
Версия LabVIEW: 20
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение S.G. »

Вот тут и не могу понять как выделять на каждой итерации новый буфер?
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2218
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 28 раз

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение Borjomy_1 »

Сделать массив кадров и перезаписывать в него. Каждый кадр должен обладать своим именем при создании. Дело в том, что обращение к буферам кадров производится по имени. И это именование сквозное в приложении. Вместо Dst и Src можно вообще использовать текстовую строку с именем буфера.
S.G.
interested
interested
Сообщения: 5
Зарегистрирован: 24 июл 2023, 22:07
Версия LabVIEW: 20
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение S.G. »

Спасибо за направление! Действительно изображению я не присваивал имени. Буду пробовать! Вы сказали , что вместо scr и dst можно вообще использовать строку, да это мне подходит, так как в итоге мне нужно сравнить несколько точек на изображении, я буду сравнивать строки. Значит теперь получается после перевода изображения в строку н с каждым новым циклом строке тоже нужно давать свой номер, чтобы она не перезаписывалась. Если есть возможность покажите пожалуйста простой пример как правильно с каждым новым циклом строке присваивать свой номер!. Спасибо!
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5474
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 88 раз

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение IvanLis »

S.G. писал(а): 10 май 2024, 14:57 Если есть возможность покажите пожалуйста простой пример как правильно с каждым новым циклом строке присваивать свой номер!. Спасибо!
Как-то так, только не забывайте уничтожать (destroy) ненужные кадры, а то память забиваться будет.
vision.png
Vision.vi
lv2015
(72.94 КБ) 12 скачиваний
S.G.
interested
interested
Сообщения: 5
Зарегистрирован: 24 июл 2023, 22:07
Версия LabVIEW: 20
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение S.G. »

Огромное вам спасибо! Попробую сегодня.
Artem.spb

Activity Автор
professor
professor
Сообщения: 3421
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 50 раз
Поблагодарили: 176 раз
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение Artem.spb »

Borjomy_1 писал(а): 10 май 2024, 09:24 Дело в том, что обращение к буферам кадров производится по имени. И это именование сквозное в приложении. Вместо Dst и Src можно вообще использовать текстовую строку с именем буфера.
"а чо, так можно было?"

Я не так уж много в видео возился, но не разу не возникала мысль использовать имя вместо буфера.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2218
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 28 раз

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение Borjomy_1 »

Artem.spb писал(а): 11 май 2024, 01:16 Я не так уж много в видео возился, но не разу не возникала мысль использовать имя вместо буфера.
Сначала выделяется именованный кадр. Далее в разных частях программы идет обращение к нему по этому имени. Имя может быть прописано как переменная или константа Imaq I/O, либо просто текстовой строкой. Текст предпочтительнее если вы работаете с именем, как с константой , потому что иногда константа IMAQ I/O просто обнуляется и потом в процессе разработки вы теряете связи. Вспоминай потом, как она называлась. Мало того, функция IMAQ Create Image (сейчас не помню точно, как называется), при совпадении имени с ранее созданным, просто отдает указатель на него. Независимо от типа изображения. По сути тот же функционал, что и со строкой.
Суть IMAQ Image это именованная (по имени, а не по указателю) область памяти. И в очередь можно отдавать просто имя Image, например.
Следствие: принцип Data Flow, основной в LabVIEW, с IMAQ Image просто не работает. Копирование всегда должно быть явным, с помощью соответствующей функции. Мало того, любые изменения сразу отображаются на индикаторе, к которому подключен IMAQ Image. Это хорошо заметно, если с кадром проводятся какие-нибудь манипуляции.

Таким образом достаточно создать массив кадров и использовать их ссылки в цикле, подставляя каждый рад следующий в функцию чтения кадра. Зная индекс ссылки, в функцию обработки отдается ИМЯ этого кадра и ИМЯ предыдущего. Создавать кадры заново не надо. Пока идет обработка, принятые кадры переписываются в свободные.
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5474
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 88 раз

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение IvanLis »

IvanLis писал(а): 10 май 2024, 15:52 Как-то так, только не забывайте уничтожать (destroy) ненужные кадры, а то память забиваться будет.
Если подключить контрол к массиву кадров, то там отображаются как раз символические ссылки на изображения.


Если последовательность кадров не интересна, то можно даже так сделать.
vision1.png
Vision.vi
lv2015
(73.42 КБ) 13 скачиваний
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1355
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение AndreyDmitriev »

IvanLis писал(а): 11 май 2024, 11:13 Если последовательность кадров не интересна, то можно даже так сделать.
vision1.png
Vision.vi
Так в общем тоже можно, но это слегка "изобретение велосипеда", так как концепция кольцевого буфера в IMAQ изначально заложена:
Ring Acquisitions - https://www.ni.com/en/support/documenta ... tions.html
Для этого есть IMAQ Configure Buffer - https://www.ni.com/docs/en-US/bundle/ni ... uffer.html
Бонусом там то, что можно извлекать из буфера с любого конца - как самые свежие картинки, так и самые старые, отслеживать статус.
Буфер этот закольцован, то есть если он заполнится, то самые старые картинки начнут автоматически перезаписываться.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1355
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение AndreyDmitriev »

S.G. писал(а): 10 май 2024, 14:57 ... вместо scr и dst можно вообще использовать строку, да это мне подходит, так как в итоге мне нужно сравнить несколько точек на изображении, я буду сравнивать строки. Значит теперь получается после перевода изображения в строку...
Эта фраза честно говоря очень сильно напрягает, поскольку строки, о которых идёт речь выше, ну никак не могут быть использованы для "сравнения точек на изображении", равно как и для "перевода изображения в строку", это всего лишь имена, которые должны быть уникальные для разных изображений. Если создать два изображения с одинаковыми именами, то они будут ссылаться на одно и то же изображение.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2218
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 28 раз

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение Borjomy_1 »

AndreyDmitriev писал(а): 12 май 2024, 07:39 Так в общем тоже можно, но это слегка "изобретение велосипеда", так как концепция кольцевого буфера в IMAQ изначально заложена
К сожалению, лично мне, например, не удалось заставить ее работать. Очень капризный метод. Такое ощущение, что не все камеры с ним работают. Последний раз, когда пытался с ним работать, ругался на формат кадра. Что-то типа "такой тип не поддерживается", хотя при покадровой съемке все работает.
AndreyDmitriev

Activity Professionalism Tutorials Gold Black
VIP
VIP
Сообщения: 1355
Зарегистрирован: 03 фев 2010, 00:42
Награды: 6
Версия LabVIEW: 6.1 - 2024
Откуда: Германия
Благодарил (а): 1 раз
Поблагодарили: 49 раз
Контактная информация:

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение AndreyDmitriev »

Borjomy_1 писал(а): 12 май 2024, 08:57
AndreyDmitriev писал(а): 12 май 2024, 07:39 Так в общем тоже можно, но это слегка "изобретение велосипеда", так как концепция кольцевого буфера в IMAQ изначально заложена
К сожалению, лично мне, например, не удалось заставить ее работать. Очень капризный метод. Такое ощущение, что не все камеры с ним работают. Последний раз, когда пытался с ним работать, ругался на формат кадра. Что-то типа "такой тип не поддерживается", хотя при покадровой съемке все работает.
Там есть свои подводные камни, да. Я использовал этот метод с Camera Link граббером, там была память на борту (32 мегабайта, кажется), что было очень удобно, поскольку буфер был на карте захвата. Бордер должен быть нулевой, а вот тип оно вроде само меняет по необходимости.

В данном случае я б начал с примера "Acquire Every Image (Optimized Performance)". В дпнном конкретном случае, когда надо выдёргивать из потока три последние картинки вот так примерно если очень грубо:
Изображение
То есть мы получаем самую свежую картинку, знаем её буфер, отступаем на одну и две назад и выдёргиваем их тоже, затем делаем процессинг прямо в цикле захвата. Картинки при извлечении из буфера "лочатся", что удобно, после процессинга их надо разлочить, захват при этом продолжается в фоне (лишь бы длины буфера хватило). Ну и есть разные опции извлечения из буфера. По идее там на первых итерациях надо проверять, что мы набрали три картики и не вываливаться в негативный индекс, но оно и так работает.
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2218
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 28 раз

Re: Imaqdx как сохранить в буфере несколько изображений

Сообщение Borjomy_1 »

В нагруженной сети кадры могут приходить битыми. Это реальность. Особенно это интересно смотрится, если кадры идут с разной экспозицией (для режима HDR).
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Создание приложений»