ここから本文です

解決済みのQ&A

OpenCVでの背景差分処理

daisuke0602jpさん

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)です。差分ですね。


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

  • 質問日時:
    2009/10/12 18:34:30
  • 解決日時:
    2009/10/13 16:54:13
  • 閲覧数:
    5,360
    回答数:
    1
  • お礼:
    知恵コイン
    100枚

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

nekono_sasukeさん

//背景差分処理
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/12 22:09:00
  • 回答日時:2009/10/12 21:42:09

質問した人からのお礼

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

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

グレード

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

総合Q&Aランキング

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

知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

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