ここから本文です

OpenCVでの背景差分処理

このエントリーをはてなブックマークに追加

質問者

daisuke0602jpさん

2009/10/1218:34:30

OpenCVでの背景差分処理

以前から考えていることなんですが、
どうしても背景差分処理をするときにエラーが出て結果が出ません。

デバックすると以下のようなエラーが出てしまいます。

「Null pointer(NULL array pointer is passed)
in function cvGetMat,.\cxarray.cpp(2781)

Press"Abort"to terminate application.
Press"Retry"to debug(if the app is running under debugger).
Press"Ignore"to continue(this is not safe).」


そしてプログラム本文が以下の内容です。

//---------------------------------------------------------
//File Name:背景差分
//---------------------------------------------------------

#include <cv.h>
#include <cxcore.h>
#include <highgui.h>
#include <stdio.h>

//IplImage
IplImage *src_img,*dst_img,*diff_img;

int main( int argc, char **argv){

int key;

//画像の読み込み
src_img = cvLoadImage("test.jpg",0);
dst_img = cvLoadImage("test2.jpg",0);

//画像表示ウィンドウの準備
cvNamedWindow("image", CV_WINDOW_AUTOSIZE);

//背景差分処理
cvAbsDiff(src_img,dst_img,diff_img);

//画像表示
cvShowImage("image", diff_img);

//キー入力
key = cvWaitKey(0);

//解放
cvDestroyWindow("image");

}


プログラム自体正確化はわかりませんので、もし間違っているところがあれば
ご教授していただきたいと思います。OpenCV自体初心者なんで。。。

やりたい内容は diff=(test.jpg)-(test2.jpg)です。差分ですね。


よろしくお願いいたします。

閲覧数:
5,542
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

編集あり2009/10/1222:09:00

//背景差分処理
cvAbsDiff(src_img, dst_img, diff_img);

上記のコードの前に
diff_img = cvCreateImage(cvGetSize(src_img), IPL_DEPTH_8U, 1);
として,差分画像を保存するdiff_imgに実体を与えておく必要があります.

蛇足:エラーとは関係ないと思いますが…(気になったので)
(1)
画像(IplImage構造体)は不要になったら解放しておいたほうが無難かと.
//解放
cvDestroyWindow("image");
の所に
cvReleaseImage(&src_img);
cvReleaseImage(&dst_img);
cvReleaseImage(&diff_img);
を追加するだけです.

(2)
cvLoadImage()関数で
cvLoadImage("test.jpg", 0);
のように第二引数を0としていますが,CV_LOAD_IMAGE_GRAYSCALE(=0)とした方が良いと思います.0だと,その画像がどのような形式で読み込まれているのか分かり難くなりませんか?
→cvLoadImage("test.jpg", CV_LOAD_IMAGE_GRAYSCALE);

質問した人からのコメント

2009/10/13 16:54:13

降参 わかりやすい回答ありがとうございました。
おかげさまでエラーなく実行することができました。

大変申し訳ないのですが、差分処理したあと変化した部分を
白く(色は何色でも)したいのですが、このプログラムにどうやったら
そのような処理ができるのでしょうか?ご教授していただけますか?

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル
  • このエントリーをはてなブックマークに追加
簡単にみんなで作るショート動画アプリ Yahoo!Chocotle for Android(無料)

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する