c++のif文についてです。
webカメラを使って肌色の面積を求めて、現在より1フレーム前の値と比較したいのですが、そのif文の部分がどのように書けば良いのかわかりません。
printf関数を使ってwebカメラで取得した肌色部分のピクセル数の前後を比較する場合(例えば、前のあたいより10倍以上大きかったら等)のif文の書き方をどなたかご教授お願いします。
以下ソースコードです。
#include "stdafx.h"
#include <cv.h>
#include <highgui.h>
#include <time.h>
#include <math.h>
#include <string>
int hsv=0;
IplImage*mask = 0;
CvSeq* contour = 0;
void GetMaskHSV(IplImage* src, IplImage* mask,int erosions, int dilations)
{
int x = 0, y = 0;
uchar H, S, V;
uchar minH, minS, minV, maxH, maxS, maxV;
CvPixelPosition8u pos_src, pos_dst;
uchar* p_src;
uchar* p_dst;
IplImage* tmp;
tmp = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 3);
cvCvtColor(src, tmp, CV_RGB2HSV);
CV_INIT_PIXEL_POS(pos_src, (unsigned char*) tmp->imageData,
tmp->widthStep,cvGetSize(tmp), x, y, tmp->origin);
CV_INIT_PIXEL_POS(pos_dst, (unsigned char*) mask->imageData,
mask->widthStep, cvGetSize(mask), x, y, mask->origin);
minH = 100; maxH = 120;
minS = 70; maxS = 255;
minV = 70; maxV = 255;
for(y = 0; y < tmp->height; y++) {
for(x = 0; x < tmp->width; x++) {
p_src = CV_MOVE_TO(pos_src, x, y, 3);
p_dst = CV_MOVE_TO(pos_dst, x, y, 3);
H = p_src[0];
S = p_src[1];
V = p_src[2];
if( minH <= H && H <= maxH &&
minS <= S && S <= maxS &&
minV <= V && V <= maxV
) {
p_dst[0] = 255;
p_dst[1] = 255;
p_dst[2] = 255;
hsv++;
} else {
p_dst[0] = 0;
p_dst[1] = 0;
p_dst[2] = 0;
}
}
}
if(erosions > 0) cvErode(mask, mask, 0, erosions);
if(dilations > 0) cvDilate(mask, mask, 0, dilations);
printf("%d\n",hsv);
if(){}←ここのif文がわかりません
cvReleaseImage(&tmp);
}
int _tmain(int argc, _TCHAR* argv[])
{
int key;
CvCapture* src;
IplImage* frame;
cvNamedWindow("カメラ映像表示");
src = cvCaptureFromCAM(0);
if(src == NULL){
printf("映像が取得できません。\n");
cvWaitKey(0);
return -1;
}
frame = cvQueryFrame(src);
mask = cvCreateImage(cvSize(frame->width,frame->height), IPL_DEPTH_8U, 3);
while(1){
frame = cvQueryFrame(src);
cvShowImage("カメラ映像表示", frame);
GetMaskHSV(frame,mask,1,1);
cvDrawContours(frame, contour, CV_RGB (255, 255, 0), CV_RGB (0, 0, 0), 1, 1, CV_AA, cvPoint (0, 0));
key = cvWaitKey(33);
if(key == 27) break;
}
cvDestroyWindow("カメラ映像表示");
cvReleaseCapture(&src);
return 0;
}
1フレーム前の値を変数に記憶して、その前の状態を記憶しておいた変数と hsv とを比較すればよいというアルゴリズムは想像できるのですが、その“1フレーム前の値”というのを、どのように表現していいかわからないのです・・
補足
回答有難うございます。 cvShowImageの後、cvSaveImageをいれていたんですが、 その順序が悪かったようです。 cvSaveImageを先に入れるとエラーがなくなりました! 有難うございました!