Armadilloフォーラム

OpenCVを用いたプログラムの実行時のエラーについて

kagawalab_yokota

2017年1月4日 18時14分

お世話になっています.横田と申します.

Armadillo-810カメラモデル開発セットとATDE5を用いて,カメラからフレームを取得し,
輪郭検出,描画を行った上で,/var/tmpに連続的に保存するというプログラムをC言語で開発しています.

クロスコンパイルは通るのですが,Armadillo-810上で実行すると次のようなエラーが出てきます.
起動時に引数に与えている1はカメラのデバイスファイル番号です(video1)

[root@armadillo810-0 (ttySC2) /hoge/stream]# ./stream 1
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
sh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver attached to camera 0
OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /build/buildd-opencv_2.3.1-11-armhf-d9JIli/opencv-2.3.1/modules/core/src/matrix.cpp, line 646
terminate called after throwing an instance of 'cv::Exceptionsh_mobile_ceu sh_mobile_ceu.0: SuperH Mobile CEU driver detached from camera 0
'
  what():  /build/buildd-opencv_2.3.1-11-armhf-d9JIli/opencv-2.3.1/modules/core/src/matrix.cpp:646: error: (-5) Unknown array type in function cvarrToMat
 
Aborted

Makefileは以下の通りです.

EXEC = stream
OBJS = stream.o
LDLIBS := -lopencv_core -lopencv_highgui -lopencv_imgproc -lm -lopencv_objdetect
CROSS_COMPILE ?= arm-linux-gnueabihf-
CC = $(CROSS_COMPILE)gcc
 
all: $(EXEC)
 
$(EXEC): $(OBJS)
    $(CC) $(LDFLAGS) -g -o $@ $(OBJS) $(LDLIBS)
 
romfs:
 
 
clean:

ソースは長くなってしまうため添付とさせて頂きます.
cvarrToMatという関数は使っていない為何らかの関数が呼び出しているのかとも思いましたがOpenCV初心者の私には良く分かりませんでしたのでこちらに質問させていただいた次第です.

取り急ぎ,私が行った対策だけ纏めておきます.(全て効果なし)
 ・IplImage型で宣言していた変数をMat型で宣言
 ・使用しているカメラモジュールの出力形式がYUV422だと思い,cvCvtColorのcodeをCV_BGR2GRAYでなく,
  CV_YUV2BGRでBGRに変換した画像をCV_BGR2GRAYでグレースケール化

初歩的な質問かもしれませんが以上,ご教授宜しくお願い致します.

ファイル ファイルの説明
stream.c
コメント

kagawalab_yokota

2017年1月5日 12時05分

横田です.
ポインタの扱いと領域確保,解放等で沢山勘違いをしていたようです.
無事解決いたしました.