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:エッジ画像