ブログ

Armadillo-640:OpenCVを使ってみる

at_kazutaka.bito
2019年8月5日 10時08分

Armadillo-640で、OpenCVを使った画像処理を試してみました。

1.構成

今回はArmadillo-640にUSB Video Class(UVC)対応のUSBカメラを接続して評価してみます。
今回利用したUSBカメラは家電量販店などで購入した以下の製品になります。

BSWHD06Mシリーズ

2.USB Video Class(UVC)の有効化

Armadillo-640:USB Video Class(UVC)を有効にする
を参考に、USB Video Class(UVC)を有効にしたカーネルイメージをArmadillo-640に書き込みます。

以降の手順は、Armadillo-640で行います。

3.OpenCVのライブラリをインストール

Armadillo-640をインターネットに接続可能なネットワークに接続します。
下記コマンドで、OpenCVのライブラリをインストールします。

root@armadillo:~# apt-get update
root@armadillo:~# apt-get install libopencv-dev


4.OpenCVのサンプルコードをビルド

今回は、以下のHowTo
Howto : Armadillo-810でOpenCVを用いた画像処理
のソースコードに、OpenCVの各APIの処理速度の計測できるようにしたものを使うことにします。

ネットワーク/USBメモリ経由などで、サンプルソース
edge-detection-yuyv-opencv.tar.gz
をArmadillo-640上にコピーしたあと、以下のようにビルドしてください。

root@armadillo:~# ls
edge-detection-yuyv-opencv.tar.gz
root@armadillo:~# tar zxvf edge-detection-yuyv-opencv.tar.gz
edge-detection-yuyv-opencv/
edge-detection-yuyv-opencv/edge-detection.o
edge-detection-yuyv-opencv/Makefile
edge-detection-yuyv-opencv/edge-detection.c
edge-detection-yuyv-opencv/edge-detection
root@armadillo:~# cd edge-detection-yuyv-opencv/
root@armadillo:~/edge-detection-yuyv-opencv# make
cc    -c -o edge-detection.o edge-detection.c
cc  -o edge-detection edge-detection.o -lopencv_core -lopencv_highgui -lopencv_imgproc -lm


5.サンプルを実行

今回のサンプルはキャプチャを20回連続で繰り返した後、最後にキャプチャした画像を、
グレースケール→エッジ検出するというものです。

サンプルは以下の様に、第一パラメータにUSBカメラのデバイス番号を指定します。
(下記は、USBカメラを"/dev/video0"として認識している場合として、第一パラメータに"0"を指定しています。)

root@armadillo:~/edge-detection-yuyv-opencv# ./edge-detection 0
capture time :  31.6450 msec
color conversion time:  13.3882 msec
edge-detection time:  71.8289 msec

最後のキャプチャの処理時間と、グレースケール変換、エッジ検出の処理時間が上記のように標準出力に表示されます。
また、最後の処理で生成された以下の画像がbmp形式で保存されています。
- src_img.bmp:元画像
- dst_img.bmp:グレースケース画像
- dst_img2.bmp:エッジ画像