つづいて、opencvをインストールする。
apt install -y chrony && chronyc sources
#上位のNTPサーバが表示される
#自前のNTPサーバがあるときは /etc/chrony/chrony.confに追記する(server 192.168.xxx.xxx iburst)
apt install -y ibus-anthy
apt install libopencv-dev -y
#opencv2は /usr/include/opencv4/以下にインストールされる
サンプル
コンパイルオプションをすべて記述してもよいが、Makefileでコンパイルは楽をしたい。
サンプルhoge.cppは
g++によるopenCVのコンパイル(
https://qiita.com/litll_li/items/378e56b4b6877ea6676f)
中に記載されているものをそのまま使用した。
sample.jpg(sample.pngも可)の各ピクセルをRGB値で表示する。
コンパイルと実行
hoge.cppが読む画像sample.jpg
は全体が8x8ピクセルで、各々幅8ピクセル高さ1ピクセルの色(黒青緑シアン赤マゼンダ黄白)付き長方形8個になる。
実行結果は左上から1行目R,G,B=0,0,0, ...., 2行目R,G,B=0,0,254, ...となっている。
青はB=255になるが、jpgで保存したので隣接ピクセルの影響を受けている。pngで保存するとB=255になる。
わかったこと
コンパイルの方法がわかった。
・g++にコンパイルオプションをいろいろ書く
・g++ pkg-config設定にいろいろ書く
でもよいが、Makefikeを書くのが簡単に思える。
コンパイルすると"undefined reference to ...."がたくさん出る。
ライブラリオプション(-l)でopencv_xxxxをつけていない。
opencvをつかうのだから、-lopencv_coreは必要になる。
他のライブラリはプログラム次第で追記する。
opencvAPIがわからないと何をしているかわからない。
「自分がこんなことをしたい」と思ってもopencvAPIを理解していないとプログラムは書けない。
Raspberry Pi Zeroでは動くのか?
マイクロSDをRaspberry Pi Zeroにつけて、a.outを実行した。
一応は動く。実行時間が20秒近くかかった。3回測定したが、同じ結果だった。
Raspberry Pi3Aでは3秒程度だったので、実行時間が長すぎる。
Raspberry Pi Zeroでコンパイルし直したところ、a.outの実行時間は3秒程度となり、Raspberry Pi3Aと同程度になった。
Raspberry Piシリーズでは、アプリはそのまま動くと思っていたが、
Raspberry Pi zeroに関しては、コンパイルし直したほうがよいことがわかった。
[参考]
g++によるopenCVのコンパイル(
https://qiita.com/litll_li/items/378e56b4b6877ea6676f)
ラズベリーパイでモニタリング!!(
https://www.rs-online.com/designspark/beginners-guide-to-computer-vision-with-raspberry-pi-4-jp)
C++でラズパイカメラv2の画像を読み込むライブラリ「raspivideocap」(
https://www.coyote009.com/raspivideocap)
Raspberry Pi 3 Model BによるIoTの実践(2019/09/19改)
第四回 画像処理のためのOpenCVの導入 (2017/09/19作)(2019/09/18改) 注(2017/11/24) 松井博和(
http://www.robot.mach.mie-u.ac.jp/~hmatsui/RasPi3B/RasPi3B_No4.pdf)
OepnCV modules(
https://docs.opencv.org/4.5.1/index.html)