生活随笔
收集整理的這篇文章主要介紹了
OpenCV: kalman滤波的代码段
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
序言:在我的疲勞檢測工程 AviTest中!顯示框為320*240,使用OpenCV的kalman濾波算法,可以實現簡單的鎖相追蹤-實現對眼球的位置鎖定。
代碼如下:
CvPoint WishchinKalman( IplImage* Image,CvPoint pCenter){CvPoint correctMat;correctMat.x = 0;correctMat.y = 0;const int stateNum = 4; const int measureNum = 2; const int winHeight = 240; const int winWidth = 320; IplImage* img = cvCreateImage(cvSize(winWidth,winHeight),8,3);//cvCvtColor(Image,img,CV_GRAY2BGR);img = cvCloneImage(Image);CvKalman* kalman = cvCreateKalman( stateNum, measureNum, 0 );//state(x,y,detaX,detaY) CvMat* process_noise = cvCreateMat( stateNum, 1, CV_32FC1 ); CvMat* measurement = cvCreateMat( measureNum, 1, CV_32FC1 );//measurement(x,y) CvRNG rng = cvRNG(-1); float A[stateNum][stateNum] ={//transition matrix 狀態轉移矩陣為什么用這個?????wishchin1,0,1,0, 0,1,0,1, 0,0,1,0, 0,0,0,1 }; memcpy( kalman->transition_matrix->data.fl,A,sizeof(A)); cvSetIdentity(kalman->measurement_matrix,cvRealScalar(1) ); cvSetIdentity(kalman->process_noise_cov,cvRealScalar(1e-5)); cvSetIdentity(kalman->measurement_noise_cov,cvRealScalar(1e-1)); cvSetIdentity(kalman->error_cov_post,cvRealScalar(1)); cvRandArr(&rng,kalman->state_post,CV_RAND_UNI,cvRealScalar(0),cvRealScalar(winHeight>winWidth?winWidth:winHeight)); CvFont font; cvInitFont(&font,CV_FONT_HERSHEY_SCRIPT_COMPLEX,1,1); const CvMat* prediction=cvKalmanPredict(kalman,0); measurement->data.fl[0]=(float)pCenter.x; measurement->data.fl[1]=(float)pCenter.y;//4.update const CvMat* correction=cvKalmanCorrect( kalman, measurement ); correctMat = cvPoint((int)correction->data.fl[0],(int)correction->data.fl[1]);關鍵接口 wishchin//draw cvSet(img,cvScalar(255,255,255,0)); //cvCircle(img,correctMat,5,CV_RGB(0,255,0),3);//predicted point with green //cvReleaseImage(&img);return correctMat;//return 0;
}
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的OpenCV: kalman滤波的代码段的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。