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分
横田です.
ポインタの扱いと領域確保,解放等で沢山勘違いをしていたようです.
無事解決いたしました.