見出し画像

OpenCV 入門 (6) - Bazel(C++)での実装

OpenCVをBazel(C++)で実装する方法をまとめました。

前回

1. OpenCVのインストール

Macの場合のインストール方法は、次のとおりです。

$ brew install opencv@3

2.  Bazelのインストール

Bazel入門」を参照。

3. OpenCV用のBazelプロジェクトの作成

画像を表示するだけのサンプルプログラムを実行してみます。

◎ プロジェクト構成
今回のプロジェクトのフォルダ構成は、次のとおりです。

helloworld
 ・main
  ・BUILD
  ・main.cc
 ・WORKSPACE
 ・opencv.BUILD
 ・sorami.jpg

◎ WORKSPACE
OpenCVのビルドファイルを指定します。

new_local_repository(
    name = "opencv",
    path = "/usr",
    build_file = "opencv.BUILD",
)

◎ opencv.BUILD
OpenCVの参照先を指定します。Macの場合は次のような感じになりました。

cc_library(
    name = "opencv",
    srcs = glob(
        [
            "local/opt/opencv@3/lib/libopencv_core.dylib",
            "local/opt/opencv@3/lib/libopencv_highgui.dylib",
            "local/opt/opencv@3/lib/libopencv_imgcodecs.dylib",
            "local/opt/opencv@3/lib/libopencv_imgproc.dylib",
            "local/opt/opencv@3/lib/libopencv_video.dylib",
            "local/opt/opencv@3/lib/libopencv_videoio.dylib",
        ],
    ),
    hdrs = glob(["local/opt/opencv@3/include/opencv2/**/*.h*"]),
    includes = ["local/opt/opencv@3/include/"],
    linkstatic = 1,
    visibility = ["//visibility:public"],
)

◎ sorami.jpg
サンプルプログラム用の画像です。

画像1

◎ main/BUILD
ターゲット「main」の名前とソースコードと参照先を指定します。

cc_binary(
   name = "main",
   srcs = ["main.cc"],
   deps = [
       "@opencv//:opencv"
   ],
)

◎ main/main.cc
サンプルプログラムの本体になります。

#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
using namespace cv;
int main(int argc, char** argv) {
   //引数チェック
   if (argc != 2) {
       printf("usage: bazel-bin/main/main <Image_Path>\n");
       return -1;
   }

   //画像の読み込み
   Mat image;
   image = imread(argv[1], 1);
   if (!image.data) {
       printf("No image data \n");
       return -1;
   }

   //ウィンドウ表示
   namedWindow("image", WINDOW_AUTOSIZE);
   imshow("image", image);
   waitKey(0);
   return 0;
}

4. サンプルプログラムの実行

はじめにサンプルプログラムをビルドします。

$ bazel build //main:main

そして以下のコマンドで実行します。

$ bazel-bin/main/main sorami.jpg

画像2

次回


この記事が気に入ったらサポートをしてみませんか?