Каков наилучший способ интеграции и отображения IplImage в графический интерфейс Qt? Можно ли это сделать с помощью OpenGL? Если да, то как?
Ну, я отвечаю на свой вопрос здесь.
Я работаю с OpenCV уже год, и много раз мне приходилось писать код, который открывает видеофайл и передает его в потоковом режиме.
В последнее время я использовал Qt для предоставления графического интерфейса высокого уровня, и я нашел решение для отображения IplImages на Qt GUI с использованием OpenGL (с которым я потратил много времени, но в конце концов добился успеха). Хотя OpenCV может быть собран с поддержкой Qt highgui, я очень хотел немного изучить OpenGL и использовать его в своем приложении.
Я подумал, что это будет полезно для людей, которым нужна базовая среда для запуска видео для своих приложений.
Эта базовая структура может использоваться в широком спектре приложений, таких как анализ видеоконтента, распознавание лиц, распознавание образов и многое другое. В более широком смысле, это в основном видеоплеер без поддержки аудио. Так что если вы хотите, вы можете добавить поддержку аудио и сделать это видеоплеером. Он будет воспроизводить практически все форматы, так как opencv использует ffmpeg для воспроизведения видео. Я создал библиотеку C ++ для той же самой, которую я использую довольно широко:
Основные классы:
QVideo : The main widget, providing functionality to open a video/rtsp stream and play it
QIplImage: The core display widget. It's a QGLWidget which renders an IplImage
BackgroundWorker: This is a thread which runs in the background to retrieve images
from the stream. It is mandatory to run the frame grabber in a background thread,
otherwise it interferes with the GUI thread. All the image processing can be done in
this thread
Исходный код предоставляется, чтобы вы могли изменить его в соответствии с вашими потребностями.
После того, как библиотека установлена, вы можете использовать ее в своем приложении qt следующим образом:
//Create an object
QVideo* video=new QVideo("Name",);
//set geometry (optional)
setCentralWidget(video);
Для сборки библиотеки вам понадобятся qt и opencv (с поддержкой ffmpeg).
Библиотека устанавливается в / usr / lib или / usr / lib64 в зависимости от архитектуры.
Включаемые файлы устанавливаются в / usr / local / include
Конечно, все это можно изменить в файле проекта при необходимости.
Для установки просто распакуйте пакет и запустите qmake, make и sudo make install.
Примечание: проект настроен для Unix и должен быть изменен для сборок Windows. Напишите мне для получения дополнительной информации.
Других решений пока нет …