ttoのblog

メモ

Ubuntu22.04 で OpenCV をビルド & インストール

Ubuntu マシンで OpenCV プログラミングしたい

  • X230 に Ubuntu22.04
  • OpenCV で遊びたい
  • 初めて UbuntuOpenCV をインストール → ハマったが何とか解決できた
  • 手順
    1. OpenCV をビルド & インストール (1 回目)
    2. cpp サンプルを実行、OpenCV からウィンドウが表示されず
    3. libgtk2.0-dev をインストール
    4. OpenCV をビルド & インストール (2 回目)
    5. cpp サンプルを実行、読み込んだ画像ファイルが表示された

1. OpenCV をビルド & インストール (1 回目)

Ubuntu OpenCV」など検索すると色んな記事が出てくるけど、公式の Installation in Linux を参考に OpenCV4.6.0 を g++ でビルド & インストールした

  1. 必要そうなパッケージをインストール
    •  $ sudo apt update
       $ sudo apt upgrade
       $ sudo apt install -y cmake g++ wget unzip
      
  2. ソースコードを DL & 解凍
    • 今回は 4.6.0 の Sources を DL
    • wget は使わずブラウザを使ってここ から 4.6.0 の Sources (.zip) を DL
    • 解凍
      • $ unzip opencv-4.6.0.zip
        
  3. ビルド用のディレクトリを作成して移動
    • $ mkdir -p build & cd build
      
  4. cmake 用の設定 (configure)
    •  $ cmake ../opencv-4.6.0
      
  5. ビルド
    • $ cmake --build ./
      
  6. チェック
    • build/bin と build/lib の中身を確認 → bin/opencv と lib/libopencv- がたくさんできてれば OK
      •  $ ls bin
         $ ls lib
        
    • OpenCVConfig*.cmake や OpenCVModules.cmake の存在を確認
      •  $ ls OpenCVConfig*.cmake
         $ ls OpenCVModules.cmake
        
  7. インストール
    • $ sudo make install
      

2. cpp サンプルを実行、OpenCV からウィンドウが表示されず

公式の Using OpenCV with gcc and Cmake を参考にサンプルコードをビルド & 実行するも、OpenCV からウィンドウ表示ができなかった

サンプルコード

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv){
    if (argc != 2) {
        printf("usage : DisplayImage.out <Image_Path>\n");
        return -1;
    }

    Mat image;
    image = imread(argv[1], 1);
    if (!image.data) {
        printf("No image data\n");
        return -1;
    }

    namedWindow("Display Image", WINDOW_AUTOSIZE);
    imshow("Display Image", image);

    waitKey(0);

    return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
include_directories( ${OpenCV_INCLUDE_DIRS} )
add_executable( DisplayImage DisplayImage.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )

サンプルのビルド

$ cmake ./
$ make

実行エラー

なにやら libgtk2.0-dev が足りないらしい

~/proj/src/opencv_test$ ./DisplayImage panda.jpg
terminate called after throwing an instance of 'cv::Exception'
  what():  OpenCV(4.6.0) ~/proj/opencv-4.6.0/modules/highgui/src/window.cpp:1250: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvNamedWindow'

中止 (コアダンプ)

3. libgtk2.0-dev をインストール

$ sudo apt install libgtk2.0-dev

4. OpenCV をビルド & インストール (2 回目)

手順 1 と同様

5. cpp サンプルを実行、読み込んだ画像ファイルが表示された

手順 2 と同様