[tip]Обновил для Qt 6.8, OpenCV 4.14 и Ubuntu 24.04[/tip]
Ставим нужные пакеты:
sudo apt update
sudo apt install build-essential checkinstall git cmake libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev libxvidcore-dev texi2html yasm zlib1g-dev
sudo apt install libgstreamer1.0-0 libgstreamer1.0-dev gstreamer1.0-tools gstreamer1.0-plugins-base libgstreamer-plugins-base1.0-dev gstreamer1.0-libav
Добавим x264 и ffmpeg по вкусу:
sudo apt install nasm
git clone https://code.videolan.org/videolan/x264
cd x264
mkdir install
./configure --enable-shared --enable-pic --prefix=/home/pavelk/Projects/OpenCV/x264/install
make -j5
make install
cd ..
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
sudo apt-get install libjpeg62 libjpeg62-dev libjpeg9 libjpeg9-dev
git clone https://github.com/FFmpeg/FFmpeg
cd FFmpeg
mkdir install
export PKG_CONFIG_PATH="/home/pavelk/Projects/OpenCV/x264/install/lib/pkgconfig/:$PKG_CONFIG_PATH"
./configure --enable-gpl --enable-version3 --enable-libx264 --enable-nonfree --enable-shared --prefix=/home/pavelk/Projects/OpenCV/FFmpeg/install/
make -j5
make install
cd ..
Ну и теперь клонируем наш OpenCV, настраиваем:
git clone https://github.com/Itseez/opencv.git OpenCV
cd OpenCV
mkdir build
mkdir install
cd build
export PKG_CONFIG_PATH="/home/pavelk/Projects/OpenCV/FFmpeg/install/lib/pkgconfig/:$PKG_CONFIG_PATH"
cmake .. -DCMAKE_INSTALL_PREFIX=/home/pavelk/Projects/OpenCV/OpenCV/install/ -DWITH_OPENGL=ON -DWITH_QT=ON -DWITH_FFMPEG=ON -DWITH_GSTREAMER=ON -DCMAKE_PREFIX_PATH=/home/pavelk/Qt/6.8.0/gcc_64
наконец-то собираем и ставим:
make -j5
make install
[tip]Кстати, «-j5» отвечает за количество потоков сборки, можете увеличить, если больше есть. [/tip]
Если нужны дополнительные модули, например xfeatures2d для работы со SURF, то нужно их скачать отдельно
cd OpenCV
git clone https://github.com/opencv/opencv_contrib
и в параметры компиляции у cmake добавить:
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules
-DOPENCV_ENABLE_NONFREE:BOOL=ON
[tip]Если какой-либо модуль при сборке будет ебать мозг, то к cmake дописать -DBUILD_opencv_modulename=OFF[/tip]
Все библиотеки будут в папке /home/pavelk/Projects/OpenCV/OpenCV/install/
Простенький пример для Qt Creator.
Создаём консольное приложение (у меня называется qtOpenCVTest), в CMakeLists.txt файл проекта добавляем:
set(OpenCV_DIR "/home/pavelk/Projects/OpenCV/OpenCV/install/lib/cmake/opencv4")
find_package(OpenCV REQUIRED)
....
target_link_libraries(appQtOpenCVTest PRIVATE
Qt6::Quick
Qt6::Widgets
${OpenCV_LIBS}
)
target_include_directories(appQtOpenCVTest PRIVATE ${OpenCV_INCLUDE_DIRS})
#include <QApplication>
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
namedWindow("TestVideo", WINDOW_AUTOSIZE);
VideoCapture cap("/home/pavelk/bumpy.mp4");
if ( !cap.isOpened() ) {
cout << "Cannot open the video file."<<endl;
return -1;
}
while( true ) {
Mat frame;
if (!cap.read(frame)) {
cout<<"Cannot read the video file."<<endl;
break;
}
imshow("TestVideo", frame);
if( waitKey(30)==27 ) { break; }
}
return a.exec();
}
Вот как-то так…

4 комментария
Действительно, проблема была в отсутствии qt.conf правильной структуры.
Всё замечательно и прекрасно работает. Собирает и debug и release. Вот только есть беда одна: собираюсь использовать мою программу без QtCreator. Кинул в директорию с исполняемым файлом нужные либы и получаю следующую ошибку: «error: (-215) !empty() in function detectMultiScale. line 1681». xml файлы haarcascade’ы имеются и пути к ним правильные. В директории с исполняемым файлом также есть нужные динамические библиотеки (хотя тут вопрос спорный: те ли это библиотеки). Сталкивались ли вы с подобным поведением?
Тут по-моему нужно копать в сторону qt.conf http://doc.qt.io/qt-5/qt-conf.html
ПАСИБО БОЛЬШОЕ…