

以下の環境でビルドしました。

OS: Windows11 64bit  
compiler: VS2019  
opencv: 4.5.1  
Qt: 15.15.1  
cmake 3.19.3 with opencv_world checked, withQt checked

cmake、VSのビルド、installを行い、下記のプログラムを実行しました。

[code]

    #include <opencv2/core.hpp>
    #include <opencv2/imgcodecs.hpp>
    #include <opencv2/highgui.hpp>
    #include <iostream>
    
    int main(int argc, const char* argv)
    {
    cv::Mat src = cv::imread(“baboon.jpg”, cv::IMREAD_COLOR);
    cv::namedWindow(“image”, cv::WINDOW_AUTOSIZE);
    cv::imshow(“image”, src);
    cv::waitKey(0);
    cv::destroyAllWindows();
    return 0;
    }
    
[/code]

実行すると、下記の実行時エラーで終了しました。

[code]

    The procedure entry point … could not be located in the dynamic link library
    　?arg@QString@@QEBA?AV1@HVQChar@@@Z C:\Qt\5.15.1\msvc2019_64\bin\Qt5Test.dll
    　?qt_metacall@QRadioButton@@UEAAHW4call@@@MetaObject@@HPEAPEAX@Z C:\opencv\build\x64\vc16\bin\opencv_world451.dll
    
[/code]

同じことをQtなしで行うと、画像が表示されます。  
従って、殆ど間違っていないと思うのですが、Qtを組み込むと何故エラーとなるのかが分かりません。  
imshowでボタン付きの新しいGUIを使いたいので、どうしてもQtをバインドしたいです。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2023-06-26T14:32:13.403
95381
2023-06-27T11:28:14.110
2023-06-26T16:27:19.080
3060
58871
question
windows opencv qt cmake
Qtありでopencvをビルドしたが、テストすると実行時エラーが発生する


意外なことで自己解決しました。コメントに記しましたが、アドバイスに従い、個別の回答として報告します。  
ポイントは、cmakeでgenerateした後のステップでした。generateの後には、buildホルダーにOpenCV.slnが作成されていますが、それをVS2019でビルドすると失敗します。cmakeでgenerateした後、OpenProjectボタンを押してOpenCV.slnを開き、ビルド、インストールすると成功しました。  
defaultの設定で、pythonバインドがPython38/Lib/site-packages/cv2に作られます。import
cv2するとdllが見つかりませんというエラーが出ましたが、import
os、os.add_dll_directory('C:/Qt/5.15.1/msvc2019_64/bin')の後にimport
cv2を行うとエラーが消えました。  
以上、C++、PythonからQt版opencvを使うことができるようになりました。  
何かのお役に立てば幸いです。


CC BY-SA 4.0
2023-06-27T08:25:41.170
95393
2023-06-27T08:25:41.170
58871
95381
answer


質問環境がどのように構築されたか書かれておらず、どうアドバイスしたらいいかわからないので、最新のVisual Studioでの操作方法を説明しておきます。

2023/05に公開されたVisual Studio 2022
17.6で[vcpkgと統合されました](https://devblogs.microsoft.com/cppblog/vcpkg-is-now-
included-with-visual-studio/)。これを使用すると世界が変わります。

Visual Studio上で普通にC++プロジェクトを作成しますが、プロジェクトのプロパティで **Use Vcpkg Manifest**
を`Yes`に設定します。

[![画像の説明をここに入力](https://i.stack.imgur.com/6p1Eo.png)](https://i.stack.imgur.com/6p1Eo.png)

その後、プロジェクトに`vcpkg.json`を追加し、次の内容を書き込みます。

[code]

    {
      "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
      "dependencies": [
        {
          "name": "opencv4",
          "features": ["qt"]
        }
      ]
    }
    
[/code]

これでQtを有効化したOpenCV4が利用できますので、あとはC++ソースコードを普通に記述してビルドするだけです。


CC BY-SA 4.0
2023-06-27T10:17:16.670
95394
2023-06-27T10:17:16.670
4236
95381
answer