資源簡介
實現運動平滑約束(Horn-Schunck)光流場估計算法,對兩幅連續圖像進行光流場估計,畫出光流場圖及殘差圖。
代碼片段和文件信息
?/*?This?program?is?“optical?flow“.It?is?pragrammed?with?“OPEN?CV“.
????It?can?only?be?used?in?picture?of?BMP(8bitone?channel).
It?is?written?by?DENGTAO.
E-MAIL:?dengtao520@gmail.com
24th/Apr/2011
?*/
#include?“stdafx.h“
#include?
#include?
#include?“highgui.h“
#include?“cv.h“
#define?pic_width?512???????????????????????????????//處理圖片的像素
#define?pic_height?384
#define?block_size?8???????????????????????????????//分塊的大小(因為把每個像素的光流都畫出的話,就看不清了,只能畫一小塊中某點的光流矢量)
#define?V_width_size?pic_width/block_size???????????//塊的數目(橫向和縱向的數目)
#define?V_height_size?pic_height/block_size
#define?ws?10
????????????????????????????????????????//控制平滑約束權重常數?????????????????????????????????????????????????????????????????
#define?AMP_CON?5????????????????????????????????//調整光流失量的常數
#define?ARROR_AMP_CON?3
static?const?double?pi=3.14159265358979323846;
using?namespace?std;
inline?static?void?allocateOnDemand(IplImage?**imgCvSize?sizeint?depthint?channels);
void??optical_paint(IplImage?*frameint?pixel_xint?pixel_yint?amp_xint?amp_y);
void?pic_infor(char?*nameint?ifstream?*infileBITMAPFILEHEADER?*bmp_file_headBITMAPINFOHEADER?*bmp_inf);
void?save_pic_infor(char?**p);
void?disp_opfl_reer(IplImage?**frame_blankIplImage?**resi_err
char?frame1[pic_width][pic_height]char?frame2[pic_width][pic_height]);
void?show_pict(char?*p[2]IplImage?**frame_blankIplImage?**resi_err
???char?frame1[pic_width][pic_height]char?frame2[pic_width][pic_height]);
???????????????????????????????????????????????????????????????????????//?主函數lightflow.cpp?:?程序入口
int?main(int?argcchar*?argv[])
{???
static?char?frame1[pic_width][pic_height]frame2[pic_width][pic_height];?//存儲兩幀圖像像素信息的二維數組
char?*p[2]={(char*)frame1(char*)frame2};??????????????????????????
IplImage?*frame_blank=NULL*resi_err=NULL;????????????????????????//?定義OpenCV的結構體指針變量(分別用來指向光流圖和殘差圖)?
show_pict(p&frame_blank&resi_errframe1frame2);????????????????//?畫出光流圖和殘差圖
????return?0;
}
?void?show_pict(char?**pIplImage?**frame_blankIplImage?**resi_err
?char?frame1[pic_width][pic_height]char?frame2[pic_width][pic_height])
?{??char?*q[2]={p[0]p[1]};
????char?input_char[10];????????????????????????????????????????????????
??? while(1)???????????????????????????????????????????????????????????//畫出多組連續圖像的光流圖和殘差圖?????????????????????
{?
?????cout<<“show?the?optical?flow???YES?or?NO“< ?cin>>input_char;
?if(!strcmp(input_char“YES“))?????????????????????????????????????//需要畫出光流和殘差圖時,輸入YES
?{??p[0]=q[0];?????????????????????????????????????????????????????//每次處理前,要將指針數組p指向frame1和紛擾me
????p[1]=q[1];
save_pic_infor(p);?????????????????????????????????????????????//該函數將保存并顯示bmp圖像的相關信息
????disp_opfl_reer(frame_blankresi_errframe1frame2);????????????//畫出光流場和殘差圖
?}
?else?
?{
??????cout<<“BYEBYE!“< ??break;
?}
}
?}
????????????
?void?save_pic_infor(char?**p)????????????????????????????????
- 上一篇:自己寫的MFC串口調試軟件
- 下一篇:門禁系統源代碼 VC++
評論
共有 條評論