Название: Как занести видео поток (OpenCV) в виджет? Отправлено: kemosab от Октябрь 16, 2017, 14:39 Понадобилось в срочном порядке допилить интерфейс для программы, суть ее в том, что она распознает изображения с веб камеры, но это не так важно.
В опред. момент мы открываем вебку: C++ (Qt) Цитировать VideoCapture cap(0); как я понял из комментариев другого разработчика (моя часть только интерфейс) именно это открывает отдельное окно с видео потоком с вебки. Так вот вопрос, как мне встроить это видео в окно проекта Qt. Очень много гуглил, но так как с QT работаю впервые, а времени пару дней, (и уже потрачено пару на поиски реализации) решил попросить Вашей помощи. На найденных мною ответах (не совсем совпадало) либо не получалось, либо я мог понять что сделать, в виду языкового барьера и отсутствия соответствующих знаний (только начал работать с ООП в принципе). Если нужны какие-то исходники- без проблем. Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: Apktyc от Октябрь 16, 2017, 14:54 1) Да поправят меня более опытные товарищи, но cv::VideoCapture (если в цитате именно о нем речь) просто класс для захвата изображения (не суть с какого источника), никаких окон не создается и т.д., там же вручную надо кадры выдирать через read.
2) Если Вы занимаетесь только интерфейсной частью, то логичнее выглядит вариант, когда Вам кидают сигнал с готовым кадром в нужном Вам формате, и Вы отрисовываете его в нужном Вам месте/виде. Хотите на QLabel, или что-то более специфичное. Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: kemosab от Октябрь 16, 2017, 14:58 1) Да поправят меня более опытные товарищи, но cv::VideoCapture (если в цитате именно о нем речь) просто класс для захвата изображения (не суть с какого источника), никаких окон не создается и т.д., там же вручную надо кадры выдирать через read. 2) Если Вы занимаетесь только интерфейсной частью, то логичнее выглядит вариант, когда Вам кидают сигнал с готовым кадром в нужном Вам формате, и Вы отрисовываете его в нужном Вам месте/виде. Хотите на QLabel, или что-то более специфичное. Код
Собственно, вот код. Возможно мне что-то не так объяснили, но по логике тогда во frame хранится каждый кадр, верно? Для меня никто уже ничего не поменяет, так сказать ;) Нужно самому разобраться Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: Apktyc от Октябрь 16, 2017, 15:16 Да, во frames к моменту imshow (вот тут то и идет показ в собственное окно) содержится нужный Вам кадр. Только с форматами наверное придется чутка помудрить.
Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: kemosab от Октябрь 16, 2017, 15:36 Да, во frames к моменту imshow (вот тут то и идет показ в собственное окно) содержится нужный Вам кадр. Только с форматами наверное придется чутка помудрить. а что вы конкретно имеете в виду? Чтобы поместить frame в QLabel нужно будет помучиться? И еще вопрос, который по ходу возник. При нажатии на кнопку, нужно поменять цвета у 50+ объектов. Каждый объект соответствует записи в массиве (например frame000, если в массиве хранится 0(цвет) и 00 (номер frame), то нужно сделать frame000 белым). Как менять цвет программно я нагуглил и разобрался. Код Но так и не понял, как сделать в цикле, например вот так: Код Как то так, думаю мысль понятна. Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: Apktyc от Октябрь 16, 2017, 15:54 а что вы конкретно имеете в виду? Чтобы поместить frame в QLabel нужно будет помучиться? Есть подозрения, что там кадр в BGR хранится.Насчет цвета, если я правильно понял, можно использовать QColor::name (http://doc.qt.io/qt-5/qcolor.html#name) Код
Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: kemosab от Октябрь 16, 2017, 16:01 Код: [quote author=Apktyc link=topic=31674.msg234171#msg234171 date=1508158451] Да, именно то что хотел (чуть позже будет ясно, но ход мыслей ясен) А что на счет нумерации frame? Я не могу заменять часть их имени переменной-счетчиком. У меня там будет 3 цикла, то есть Код [/code] Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: Apktyc от Октябрь 16, 2017, 16:30 Поместите указатели на свои фреймы в контейнер какой-нибудь, и оттуда по индексам (i, j, k) обновляйте.
Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: kemosab от Октябрь 16, 2017, 16:34 Поместите указатели на свои фреймы в контейнер какой-нибудь, и оттуда по индексам (i, j, k) обновляйте. контейнер имеется в виду что-то вроде vector или stl? Еще не сталкивался с этим. Или имеется в виду combobox какой нибудь?Раз указатели, то очевидно, что первое. Я создаю виджеты в режиме дизайнера, это критично? Просто если программно создавать объекты, я еще чуть представляю как это поместить туда, а вот если через дизайнера то понятия не имею. Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: Apktyc от Октябрь 16, 2017, 16:47 Как-то так findChildren (http://doc.qt.io/qt-5/qobject.html#findChildren)
Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: kemosab от Октябрь 16, 2017, 17:17 Как-то так findChildren (http://doc.qt.io/qt-5/qobject.html#findChildren) почитал, спасибо Но я наверное что-то не так делаю, если писать так, то выбирает еще и QTextEdit Код Решил добавить маску по имени, что то вроде Код Но так не выбирает ничего Название: Re: Как занести видео поток (OpenCV) в виджет? Отправлено: Apktyc от Октябрь 17, 2017, 10:04 У findChildren есть вариант с регулярным выражением, так-то.
|