🙆

[環境構築]React+TypeScriptでWebAssembly002。WindowsでOpenCV,C++,VSCode,CMake。

2024/01/15に公開

<- React+TypeScriptでWebAssembly001
                      React+TypeScriptでWebAssembly003 ->



(コンパイラはMSVCだよ。)

Abstract

OpenCVを、 Windows,VSCode,C++,CMakeで32bit環境構築してみた。なぜならWebAssemblyが32bit限定だから。
OpenCVですよ。大切なので2回言いました。

前提

手順

1. OpenCVのConfigure実行

  • プロジェクトフォルダ作成

    opencvフォルダを作成。
    $ mkdir opencv && cd opencv
    
    • opencvとopencv_contribをダウンロード
    opencvとopencv_contribをダウンロード
    $ curl -Lo opencv4.zip https://github.com/opencv/opencv/archive/4.x.zip
    $ curl -Lo opencv_contrib4.zip https://github.com/opencv/opencv_contrib/archive/4.x.zip
    
    • opencv4.zip,opencv_contrib4.zipを解凍。
    opencvフォルダを作成。
    $ dir opencv
    ~略~
    2024/01/12  20:21    <DIR>          opencv-4.x
    2024/01/15  21:52        98,530,706 opencv4.zip
    2023/11/02  23:41    <DIR>          opencv_contrib-4.x
    2024/01/15  21:52        61,315,582 opencv_contrib4.zip
    ~略~
    
    • CMake GUI起動
      Where is the source code: D:\apps\opencv\opencv-4.x(topのCMakeLists.txtの場所,適宜読み替えてね。)
      Where to build the binaries: 上記の配下のbuild
      → Configure押下

            ↓
      Configure done

            ↓
      この中から、"OPENCV_EXTRA_MODULE_PATH"を頑張って探して設定。
      OPENCV_EXTRA_MODULE_PATH : D:\apps\opencv\opencv_contrib-4.x\modules
      "BUILD_opencv_world"を頑張って探して設定。
      BUILD_opencv_world: レ点 (opencv_worldはいらんかった)
      → Configureをも一回押下
      Configure done

            ↓
      → Generate押下

      Generating done
            ↓
      閉じる。

2. OpenCVをVisual Studio 2022でビルド

D:\apps\opencv\opencv-4.x\build配下にOpenCV.slnが出来てる。
OpenCV.sln をVisual Studio 2022で開く。

      ↓
OpenCVの中をデバッグするつもりはなので、ReleaseとWin32を選んで、ALL_BUILDを選ぶ。

      ↓
ビルド。15分ぐらいかな~。

ビルドエラーなし。さすがOpenCV!!
      ↓
INSTALL -> ビルドを選ぶ。

      ↓
ビルド。

ビルドエラーなし。さすが。
      ↓
 ビルド完了。閉じる。

3. 環境変数Pathに設定。

以下のパスを環境変数Pathに追加する。

  • D:\apps\opencv\opencv-4.x\build\install
  • D:\apps\opencv\opencv-4.x\build\install\include
  • D:\apps\opencv\opencv-4.x\build\install\x86\vc17\bin
    ※D:\apps\opencv\opencv-4.xの部分は自身の環境に読み替えてね。

4. 再起動

環境変数をいじったのでシステムに反映させるために再起動する。

5. プロジェクトフォルダとソース一式を作成

  • プロジェクトフォルダ作成

    bbb1stフォルダを作成。
    mkdir bbb2nd && cd bbb2nd
    
    • main.cppを作成
    main.cppの中身
    #include <opencv2/opencv.hpp>
    
    int main(void) {
        // 画像の読み込み
        cv::Mat inputImage = cv::imread("../input.png");
    
        // 画像が正しく読み込まれたかを確認
        if (inputImage.empty()) {
    	std::cerr << "画像を読み込めませんでした" << std::endl;
    	return -1;
        }
    
        // 画像の処理を行う ここでは例として、画像をグレースケールに変換する
        cv::Mat grayscaleImage;
    //    cv::cvtColor(inputImage, grayscaleImage, cv::COLOR_BGR2GRAY);
    //    ↑この関数はリンクエラーになるので、コメントアウト
    
        // グレースケール画像を表示
    //    cv::imshow("Grayscale Image", grayscaleImage);
    //    ↑この関数はリンクエラーになるので、コメントアウト
    
        // キー入力待ち
        cv::waitKey(0);
    
        // ウィンドウを閉じる
        cv::destroyAllWindows();
        return 0;
    }
    

    解決した。参考:[環境構築]OpenCVをソースビルドした時、デフォルト設定だと、cv::cvtColor()と、cv::imshow()でリンクエラー。

    • CMakeLists.txtを作成
    CMakeLists.txtの中身
    cmake_minimum_required(VERSION 3.5)
    project(OpenCVExample)
    
    # OpenCVのパッケージを見つける
    find_package(OpenCV REQUIRED)
    
    # #OpenCV関係のインクルードディレクトリのパスを設定
    # include_directories( ${OpenCV_INCLUDE_DIRS} )
    
    # ソースファイルを指定
    set(SOURCES main.cpp)
    
    # 実行可能ファイルをビルド
    add_executable(OpenCVExample ${SOURCES})
    
    message('----------------s')
    message(${SOURCES})
    message(${OpenCV_LIBS})
    message('----------------e')
    
    # OpenCVをリンク
    target_link_libraries(OpenCVExample ${OpenCV_LIBS})
    
    

6. VSCodeでプロジェクトフォルダを開く


VSCodeの拡張機能C/C++、CMake Toolsを入れてなければ入れておく。
      ↓

  • C/C++: Edit Configurations(JSON)を選択
    Ctrl + Shift + P -> "C/C++: Edi"まで入力と出てくる。

          ↓
    c_cpp_properties.jsonが生成される。ついでに右下にビルド/デバッグ/実行ボタンも表示される。

7. インクルードパスを追加

main.cppに戻ると、赤波線でエラーになっている。

      ↓
手順3でビルドしたパスを設定。

      ↓
赤波線が消えている。

8. 実行

ブレークポイントを設定して、カブト虫ボタンを押す。

      ↓
初回のみ下記が表示される。X86を選ぶ。(WebAssemblyは32bit)

      ↓
いろいろ動き出す。

      ↓
ちょっと待つと、ブレークポイントで止まる。

出来た!!

OpenCVも、CMake+VSCodeでやっとできた。
分かれば、簡単なんだけど、ハマったな~。

解決した。参考:[環境構築]OpenCVをソースビルドした時、デフォルト設定だと、cv::cvtColor()と、cv::imshow()でリンクエラー。

Discussion