0

ビデオのすべてのフレームとそのビデオの最初のフレームとの相互相関を見つける必要があります....

double crossCorrelation( IplImage* img1, IplImage* img2 ) {
double corr;
int M = img1->width;
int N = img1->height;

BwImage img_1( img1 );
BwImage img_2( img2 );

CvScalar img1_avg = cvAvg( img1, NULL );
CvScalar img2_avg = cvAvg( img2, NULL );

double sum_img1_img2 = 0;
double sum_img1_2 = 0;
double sum_img2_2 = 0;

for( int m=0; m<M; ++m ) {
    for( int n=0; n<N; ++n ) {
        sum_img1_img2   = sum_img1_img2 + (img_1[m][n]-img1_avg.val[0])*(img_2[m][n]-img2_avg.val[0]);  
        sum_img1_2      = sum_img1_2 + (img_1[m][n]-img1_avg.val[0])*(img_1[m][n]-img1_avg.val[0]);
        sum_img2_2      = sum_img2_2 + (img_2[m][n]-img2_avg.val[0])*(img_2[m][n]-img2_avg.val[0]);
    }
}

corr = sum_img1_img2/sqrt(sum_img1_2*sum_img2_2);
return corr;
}

これは、相関関係を見つけるためのコードです。img1 の場合、フレーム 1 が必要で、残りのフレームは img 2 in loop になります!

どうすればいいですか?助けてください!

4

2 に答える 2

1

このコードを試してください...動作します。

CvCapture *video = cvCaptureFromFile("C:\\path_to_video.avi");

IplImage *firstFrame = cvQueryFrame(video);//this is the first frame
IplImage *nextFrame;

while(nextFrame!=NULL)
{
   nextFrame = cvQueryFrame(video);

   if(nextFrame!=NULL)
     double CrossCorrValue = crossCorrelation(firstFrame,nextFrame); 
}
于 2012-09-03T01:35:50.337 に答える
0

おそらく、より最新の VideoCapture::retrieve 関数と cv::Mat を使用する必要がありますが、基本的にrotating_imageは正しいです。

最初のフレームを別の画像に取得し、後続のフレームに新しい画像を再利用し続けるだけです

于 2012-09-03T01:50:38.650 に答える