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
サンプルプログラム用の画像です。
◎ 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