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 循环!

我该怎么做?请帮忙!

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 回答