OpenCVでのビット数のカウント
はじめまして。今回皆様のお力をお借りしたく質問させて頂きました。
どうぞ宜しくお願いします。
私は今OpenCV1.1を使って、2枚のエッジ処理して2値化された画像の差分を取り、変化しているビット数をカウントして表示させるというプログラムを作っています。
しかし、デバッグするとエラーが出てしまい、失敗してしまいます。
どこに問題があるのでしょうか?
プログラム初心者のため、初歩的なミスをしているのかもしれません。
開発環境はMicrosoft Visual C++ 2010です。
以下にプログラムを載せておきます。
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#pragma comment(lib,"cv.lib")
#pragma comment(lib,"cxcore.lib")
#pragma comment(lib,"highgui.lib")
/* 背景画像のファイル名 */
#define INPUT_FILE1 "5×5medcanny.bmp"
/* 対象画像のファイル名 */
#define INPUT_FILE2 "Fire5×5medcanny.bmp"
/* 差分画像のファイル名 */
#define OUTPUT_DIFF_FILE "diff.bmp"
#define WIDTH 352
#define HEIGHT 288
int _tmain(int argc, _TCHAR* argv[])
{
// 画像変数宣言
IplImage *img_in1, *img_in2, *img_diff;
cvNamedWindow("期待値画像"); // 表示ウィンドウの作成
cvNamedWindow("比較画像");
cvNamedWindow ("差分画像", CV_WINDOW_AUTOSIZE);
img_in1 = cvLoadImage(INPUT_FILE1); // 画像ファイルの読み込み
img_in2 = cvLoadImage(INPUT_FILE2);
if(img_in1 == NULL || img_in2 == NULL) // ファイルが読み込めない場合
{
printf("ファイルが読み込めません。\n");
cvWaitKey(0); // キー入力待機
return -1;
}
// 画像領域の確保
img_diff = cvCreateImage(cvSize(img_in1->width, img_in1->height), IPL_DEPTH_8U, 1);
// 期待値画像と比較画像の差分
cvAbsDiff(INPUT_FILE1, INPUT_FILE2, OUTPUT_DIFF_FILE);
// 差分画像ファイルの読み込み
img_diff = cvLoadImage(OUTPUT_DIFF_FILE);
// 差分画像の画素数の取得
IplImage img_hdr;
IplImage *dst_img = cvGetImage (img_diff, &img_hdr);
// 差分画像の画素数のカウント
int count = 0;
count += cvCountNonZero(dst_img);
printf("%d\n",count);
cvShowImage("期待値画像", img_in1); // 表示ウィンドウに画像を表示
cvShowImage("比較画像", img_in2);
cvShowImage("差分画像", img_diff);
cvSaveImage("Image_diff.bmp", img_diff); // 出力画像の保存
cvWaitKey(0); // キー入力待機
cvDestroyAllWindows(); // すべての表示ウィンドウの破棄
cvReleaseImage(&img_in1); // 画像領域の解放
cvReleaseImage(&img_in2);
cvReleaseImage(&img_diff);
cvReleaseImage(&dst_img);
return 0;
}
お礼
一つ目のやり方ですが、サーバー外からの呼び出しを想定しているので ちょっとムリかなと思います。 二つ目のログ集計ですが、こんな事も出来るんですね。なるほど。 さくらのレンタルサーバーを今現在使っているのですが、 そこで出来るか調べてみます。 ・・・自鯖でないとちょっと厳しいかな ともかく、ありがとうございます。