3

シンプルな Qt Opencv アプリケーションをデプロイしようとしていました。コードは次のとおりです。

Qt: .pro ファイル:

QT       += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = opencvVideoTest
TEMPLATE = app

SOURCES += main.cpp\
    mainwindow.cpp

HEADERS  += mainwindow.h

FORMS    += mainwindow.ui

INCLUDEPATH = -I/usr/local/include

LIBS += -lm -lopencv_core -lopencv_highgui -lopencv_imgproc

メインウィンドウ.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <opencv2/core/core.hpp>
#include <opencv/cv.h>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    cv::Mat img;

   cv::VideoCapture cap("BMWM5.avi");

   if(cap.isOpened()){

   for(;;){
       cap.read(img);
       cv::resize(img,img,cv::Size(604,480));
       cv::imshow("Opencv", img);
       cv::waitKey(33);
   }
   }
   else{

   }


}

MainWindow::~MainWindow()
{
    delete ui;
}

上記のスニペットは、Opencv 2.4.3、ffmpeg 1.1.2、および Qt 5.0.1 を搭載した開発マシンで正常に動作します。macdeployqt を使用する前に otool を実行してデプロイしようとすると、次のようになります。

>   /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current
 version 169.3.0)   /usr/local/opt/opencv/lib/libopencv_core.2.4.3.dylib
 (compatibility version 2.4.0, current version 2.4.3)
 >  /usr/local/opt/opencv/lib/libopencv_highgui.2.4.3.dylib
 (compatibility version 2.4.0, current version 2.4.3)
>   /usr/local/opt/opencv/lib/libopencv_imgproc.2.4.3.dylib
   (compatibility version 2.4.0, current version 2.4.3)
>   /usr/local/Qt5.0.1/5.0.1/clang_64/lib/QtWidgets.framework/Versions/5/QtWidgets
  (compatibility version 5.0.0, current version 5.0.1)
>   /usr/local/Qt5.0.1/5.0.1/clang_64/lib/QtGui.framework/Versions/5/QtGui
  (compatibility version 5.0.0, current version 5.0.1)
>   /usr/local/Qt5.0.1/5.0.1/clang_64/lib/QtCore.framework/Versions/5/QtCore
  (compatibility version 5.0.0, current version 5.0.1)
>   /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
  (compatibility version 1.0.0, current version 1.0.0)
>   /System/Library/Frameworks/AGL.framework/Versions/A/AGL
  (compatibility version 1.0.0, current version 1.0.0)
>   /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current
  version 56.0.0)

macdeployqt 出力後の otool:

/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 169.3.0)
    @executable_path/../Frameworks/libopencv_core.2.4.3.dylib (compatibility version 2.4.0, current version 2.4.3)
  @executable_path/../Frameworks/libopencv_highgui.2.4.3.dylib (compatibility version 2.4.0, current version 2.4.3)
  @executable_path/../Frameworks/libopencv_imgproc.2.4.3.dylib (compatibility version 2.4.0, current version 2.4.3)
  @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets

(互換バージョン 5.0.0、現在のバージョン 5.0.1) @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui (互換バージョン 5.0.0、現在のバージョン 5.0.1) @executable_path/../Frameworks /QtCore.framework/Versions/5/QtCore (互換バージョン 5.0.0、現在のバージョン 5.0.1) /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (互換バージョン 1.0.0、現在のバージョン 1.0.1) 0) /System/Library/Frameworks/AGL.framework/Versions/A/AGL (互換バージョン 1.0.0、現行バージョン 1.0.0) /usr/lib/libstdc++.6.dylib (互換バージョン 7.0.0、現行バージョン56.0.0)

しかし、それを展開した後、ユーザーのマシンでアプリを実行しようとするとクラッシュし、エラーも報告されませんでした.Windowsでもまったく同じことが起こりましたが、opencv_ffmpeg.dllをexeフォルダにコピーすると正常に動作しました. ここで同じロジックを使用しようとして失敗しました。次に、すべての ffmpeg とその依存関係の各 lib ファイルを手動でプロジェクト フォルダーに追加しましたが、それでも失敗しました。他の解決策、助けてください。私は mac dpeloyment の初心者です。何かが欠けているか、見落とされていますか?

4

0 に答える 0