2012-09-01 64 views
0

我必须找到与视频的第一帧的视频的所有帧的互相关....如何使用opencv获取视频的第一帧?

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

我该怎么做? 请帮忙!

回答

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); 
} 
+0

你应该用CV ::垫(C++)或CvMat中(C) - 而不是IplImage的 - 但基本上是正确的 –

0

你应该使用更现代的VideoCapture ::检索功能和CV ::垫 - 但本质上rotating_image是正确的。

只要抓住第一帧到一个单独的图像,然后继续重复使用一个新的形象,为后续帧

相关问题