2012-09-01 66 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是正確的。

只要抓住第一幀到一個單獨的圖像,然後繼續重複使用一個新的形象,爲後續幀

相關問題