HI_VOID GMMSampleSingle()
{
#if 1
IVE_SRC_IMAGE_S stIveImg;
IVE_DST_IMAGE_S stIveFg;
IVE_DST_IMAGE_S stIveBg;
HI_BOOL bInstant = HI_TRUE; // must be true
IVE_HANDLE hIveHandle; // handle
IVE_MEM_INFO_S *pstDst; //gmm model
IVE_GMM_CTRL_S stGMMCtrl; //stGmmCtrl
IplImage *pimgGray=NULL;
IplImage *pfg=NULL;
IplImage *pfgRGB=NULL;
IplImage *pBgGray=NULL;
HI_S32 s32Result; // if s32Result is 0 success
HI_U32 FrameNum = 1;
CvSize S;
string buff = "list1.txt";
const char * outputDir = "output";
ifstream infile;
infile.open(buff.c_str());
getline(infile, buff);
IplImage * pimg=cvLoadImage(buff.c_str());
HI_U16 u16Width=pimg->width;
HI_U16 u16Height=pimg->height;
cout<<"u16Width "<width,pimg->height);
pimgGray = cvCreateImage(S,8,1);
if(HI_NULL == pimgGray)
{
printf("pimgGray creat error");
goto FAILURE;
}
}
// pstDst
pstDst = (IVE_MEM_INFO_S *)malloc(sizeof(IVE_MEM_INFO_S));
stGMMCtrl.u0q16InitWeight = 3276; //0.05
stGMMCtrl.u0q16BgRatio = 52428; //0.8
stGMMCtrl.u22q10MaxVar = (2000 << 10);
stGMMCtrl.u22q10MinVar = (200 << 10);
stGMMCtrl.u22q10NoiseVar = (225 << 10);
stGMMCtrl.u8q8VarThr = 1600;
stGMMCtrl.u8ModelNum =3;
stGMMCtrl.u0q16LearnRate = 327;
cout<<"stGMMCtrl.u8ModelNum:"<nChannels(): "<nChannels<nChannels(): "<nChannels<imageData,pimgGray->width * pimgGray->height);
//foreground
if(HI_NULL == stIveFg.pu8VirAddr[0])
{
s32Result = SAMPLE_COMM_IVE_CreateImage(&stIveFg,IVE_IMAGE_TYPE_U8C1, u16Width,u16Height);
cout<<"s32Result Fg HI_CreateIveImage "<imageData, pimgGray->width * pimgGray->height);
// background
if(HI_NULL == stIveBg.pu8VirAddr[0])
{
s32Result = SAMPLE_COMM_IVE_CreateImage(&stIveBg,IVE_IMAGE_TYPE_U8C1, u16Width,u16Height);
cout<<"s32Result Bg HI_CreateIveImage "<imageData, pimgGray->width * pimgGray->height);
//pstModel
cout<<"pimg->width"<width<height"<height<u32Size = stGMMCtrl.u8ModelNum * 7 * pimg->width * pimg->height;
cout<<"pstDst->u32Size "<u32Size<u32Size);
if (s32Result!= HI_SUCCESS)
{
printf("SAMPLE_COMM_IVE_CreateMemInfo fail\n");
}
memset(pstDst->pu8VirAddr, 0, pstDst->u32Size);
time_t start_t,end_t;
start_t = clock();
//cout<<"will get into GMM"<u32PhyAddr<<" "<<"pstDst->u32PhyAddr"<width,pimg->height);
pfg = cvCreateImage(S,8,1);
if(HI_NULL == pfg)
{
goto FAILURE;
}
}
if(HI_NULL == pfgRGB)
{
S = cvSize(pimg->width,pimg->height);
pfgRGB = cvCreateImage(S,8,3);
if(HI_NULL == pfgRGB)
{
goto FAILURE;
}
}
if(HI_NULL == pBgGray)
{
S = cvSize(pimg->width,pimg->height);
pBgGray = cvCreateImage(S,8,1);
if(HI_NULL == pBgGray)
{
goto FAILURE;
}
}
memcpy(pfg->imageData, stIveFg.pu8VirAddr[0],pimg->width * pimg->height);
memcpy(pBgGray->imageData,stIveBg.pu8VirAddr[0],pimg->height * stIveBg.u16Stride[0]);
cvCvtColor( pfg, pfgRGB, CV_GRAY2BGR );
FrameNum++;
}
FAILURE:
IVE_MMZ_FREE(stIveImg.u32PhyAddr[0],stIveImg.pu8VirAddr[0]);
IVE_MMZ_FREE(stIveFg.u32PhyAddr[0], stIveFg.pu8VirAddr[0]);
IVE_MMZ_FREE(stIveBg.u32PhyAddr[0], stIveBg.pu8VirAddr[0]);
IVE_MMZ_FREE(pstDst->u32PhyAddr, pstDst->pu8VirAddr);
if(HI_NULL != pstDst->pu8VirAddr)
{
free(pstDst->pu8VirAddr);
}
if(HI_NULL != pstDst)
{
free(pstDst);
}
if(HI_NULL != pfgRGB)
cvReleaseImage(&pfgRGB);
if(HI_NULL != pfg)
cvReleaseImage(&pfg);
if(HI_NULL != pBgGray)
cvReleaseImage(&pBgGray);
HI_MPI_SYS_Exit();
return;
#endif
}