[tip]Обновил для Qt 5.14, OpenCV 4.1 и Ubuntu 18.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-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-plugins-bad gstreamer1.0-libav
sudo apt install libgtkglext1 libgtkglext1-dev
Добавим x264 и ffmpeg по вкусу:
sudo apt install nasm
git clone https://code.videolan.org/videolan/x264
cd x264
./configure --enable-shared --enable-pic
make
sudo 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
./configure --enable-gpl --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libvorbis --enable-libx264 --enable-nonfree --enable-postproc --enable-version3 --enable-shared
make
sudo make install
cd ..
Ну и теперь клонируем наш OpenCV, настраиваем:
git clone https://github.com/Itseez/opencv.git OpenCV
cd OpenCV
mkdir build
cd build
export PATH=/home/pavelk/Qt5.14.0/5.14.0/gcc_64/bin:$PATH
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/opencv/ -DWITH_OPENGL=ON -DWITH_QT=ON
В PATH только путь на свой замените.
наконец-то собираем и ставим:
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]
Все библиотеки будут в папке /usr/local/opencv/
Простенький пример для Qt Creator: Создаём консольное приложение, в *.pro файл проекта добавляем:
QT += widgets
INCLUDEPATH +="/usr/local/opencv/include/opencv4"
LIBS += -L"/usr/local/opencv/lib/"
LIBS += \
-lopencv_core \
-lopencv_features2d \
-lopencv_highgui \
-lopencv_imgcodecs \
-lopencv_imgproc \
-lopencv_video \
-lopencv_videoio \
-lopencv_videostab
#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
ПАСИБО БОЛЬШОЕ…