joyup

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup  发布于  2016-10-21 14:43:43
采纳率 0%
10个问答
7240

HI_MPI_IVE_GMM 背景建模程序还是跑不通,大家能不能帮我看看是什么原因

 
[code]
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 "<        cout<<"u16Height "<
        if(NULL == pimgGray)
                {
                        printf("coming into pimgGray\n");
                        S = cvSize(pimg->width,pimg->height);
                        pimgGray = cvCreateImage(S,8,1);
                        if(HI_NULL == pimgGray)
                        {
                                printf("pimgGray creat error");
                                goto FAILURE;
                        }
                }

        
        // pstDst
        //pstDst = (IVE_DST_MEM_INFO_S *)malloc(sizeof(IVE_DST_MEM_INFO_S));
        //HI_CHECK_ET_GOTO(pstDst,HI_NULL,FAILURE);
      


        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;
         
        // init
        memset(&stIveImg, 0, sizeof(IVE_SRC_IMAGE_S));
        memset(&stIveFg, 0,sizeof(IVE_DST_IMAGE_S));
        memset(&stIveBg, 0, sizeof(IVE_DST_IMAGE_S));
       
        //init
        SAMPLE_COMM_IVE_CheckIveMpiInit();


        while(getline(infile, buff))
        {
                 pimg=cvLoadImage(buff.c_str());
                if (!pimg)
                {
                        cout<<"error input image"<                         break;
                }
                cvCvtColor(pimg,pimgGray,CV_BGR2GRAY);
                cout<<"pimg->nChannels(): "<nChannels<                 cout<<"pimgGray->nChannels():   "<nChannels<
                // source image
                if(HI_NULL == stIveImg.pu8VirAddr[0])
                {
                s32Result = SAMPLE_COMM_IVE_CreateImage(&stIveImg,IVE_IMAGE_TYPE_U8C1,u16Width,u16Height);
                cout<<"s32Result stIveImg HI_CreateIveImage "<                 }
                cout<                 memcpy(stIveImg.pu8VirAddr[0],pimgGray->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 "<
                }
                cout<                 memcpy(stIveFg.pu8VirAddr[0],pimgGray->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 "<                 //HI_CHECK_ET_GOTO(s32Result,HI_FAILURE,FAILURE);
                }
                cout<                 memcpy(stIveBg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);


                //pstModel
               
                pstDst->u32Size = stGMMCtrl.u8ModelNum * 7 * pimg->width * pimg->height;
                s32Result  = SAMPLE_COMM_IVE_CreateMemInfo(pstDst, pstDst->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"<
cout< cout< cout< cout<u32PhyAddr<<" "<<"pstDst->u32PhyAddr"<
s32Result = HI_MPI_IVE_GMM(&hIveHandle,&stIveImg,&stIveFg,&stIveBg,pstDst,&stGMMCtrl,bInstant);
if (HI_SUCCESS != s32Result)
    {
       printf("s32Result (%#x)\n", s32Result);
    }
                end_t = clock();
                long cost_t = (long)(end_t - start_t);
                cout<<"cost_t: "<                 if(HI_SUCCESS != s32Result)
                {
                        goto FAILURE;
                }

                if(pfg == HI_NULL)
                {
                        S = cvSize(pimg->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
}
[/code]

[img]D:\bbb.png[/img]
我来回答
回答25个
时间排序
认可量排序

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 14:46:52
认可0
2401460224  stIveImg.u32PhyAddr[0]
2401538048  stIveFg.u32PhyAddr[0]
2401615872  stIveBg.u32PhyAddr[0]
pstImage-> u32PhyAddr[0] can not be zero
check image pstSrc failed
check GMM parameters failed.
s32Result is  0xA01D8003  
0xA01D8003  HI_ERR_IVE_ILLEGAL_PARAM 参数超出合法范围
看上去很好解决的样子,可是我就是不知道该怎么改

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 14:49:59
认可0
[code]HI_S32 SAMPLE_COMM_IVE_CreateImage(IVE_IMAGE_S* pstImg, IVE_IMAGE_TYPE_E enType, HI_U16 u16Width, HI_U16 u16Height)
{
    HI_U32 u32Size = 0;
    HI_S32 s32Ret;
    if (NULL == pstImg)
    {
        SAMPLE_PRT("pstImg is null\n");
        return HI_FAILURE;
    }

    pstImg->enType = enType;
    pstImg->u16Width = u16Width;
    pstImg->u16Height = u16Height;
    pstImg->u16Stride[0] = SAMPLE_COMM_IVE_CalcStride(pstImg->u16Width, IVE_ALIGN);
    switch (enType)
    {
        case IVE_IMAGE_TYPE_U8C1:
        case IVE_IMAGE_TYPE_S8C1:
        {
            u32Size = pstImg->u16Stride[0] * pstImg->u16Height;
            s32Ret = HI_MPI_SYS_MmzAlloc(&pstImg->u32PhyAddr[0], (void**)&pstImg->pu8VirAddr[0], NULL, HI_NULL, u32Size);
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_PRT("Mmz Alloc fail,Error(%#x)\n", s32Ret);
                return s32Ret;
            }
           cout<<"pstImg->u32PhyAddr[0]"<u32PhyAddr[0]<         }
        break;[/code]
SAMPLE_COMM_IVE_CreateImage 的实现

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 14:50:40
认可0
[code]HI_S32 SAMPLE_COMM_IVE_CreateMemInfo(IVE_MEM_INFO_S* pstMemInfo, HI_U32 u32Size)
{
    HI_S32 s32Ret;

    if (NULL == pstMemInfo)
    {
        SAMPLE_PRT("pstMemInfo is null\n");
        return HI_FAILURE;
    }
    cout<<"u32Size "<     pstMemInfo->u32Size = u32Size;
    s32Ret = HI_MPI_SYS_MmzAlloc(&pstMemInfo->u32PhyAddr, (void**)&pstMemInfo->pu8VirAddr, NULL, HI_NULL, u32Size);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("Mmz Alloc fail,Error(%#x)\n", s32Ret);
        return HI_FAILURE;
    }

    return HI_SUCCESS;
}[/code]

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 14:51:38
认可0
是我少了那个初始化吗 我的图片输入是320(w)*240(H)大小的彩色图片

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 15:05:42
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39930&ptid=13082]joyup 发表于 2016-10-21 14:46[/url]
2401460224  stIveImg.u32PhyAddr[0]
2401538048  stIveFg.u32PhyAddr[0]
2401615872  stIveBg.u32PhyAdd ...[/quote]

IVE_MEM_INFO_S *pstDst;

这个指针没有开内存, 就在使用, 是否有问题 ?

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 15:10:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39935&ptid=13082]zhuangweiye 发表于 2016-10-21 15:05[/url]
IVE_MEM_INFO_S *pstDst;

这个指针没有开内存, 就在使用, 是否有问题 ?[/quote]

124. pstDst->u32Size = stGMMCtrl.u8ModelNum * 7 * pimg->width * pimg->height;
125. s32Result  = SAMPLE_COMM_IVE_CreateMemInfo(pstDst, pstDst->u32Size);
我是不是相当于对pstDst 开内存了。

SAMPLE_COMM_IVE_CreateMemInfo 的具体实现是这样的:
HI_S32 SAMPLE_COMM_IVE_CreateMemInfo(IVE_MEM_INFO_S* pstMemInfo, HI_U32 u32Size)
{
    HI_S32 s32Ret;

    if (NULL == pstMemInfo)
    {
        SAMPLE_PRT("pstMemInfo is null\n");
        return HI_FAILURE;
    }
    cout<<"u32Size "<     pstMemInfo->u32Size = u32Size;
    s32Ret = HI_MPI_SYS_MmzAlloc(&pstMemInfo->u32PhyAddr, (void**)&pstMemInfo->pu8VirAddr, NULL, HI_NULL, u32Size);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_PRT("Mmz Alloc fail,Error(%#x)\n", s32Ret);
        return HI_FAILURE;
    }

    return HI_SUCCESS;
}

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 15:15:13
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39936&ptid=13082]joyup 发表于 2016-10-21 15:10[/url]
124. pstDst->u32Size = stGMMCtrl.u8ModelNum * 7 * pimg->width * pimg->height;
125. s32Result  = S ...[/quote]

pstDst这个是不是野指针?

没有给这个指针分配内存

比如说
typedef struct tag_test
{
int a;
int b;
}TEST_S;

要么
TEST_S stTest;
TEST_S *p = &stTest;
要么
TEST_S *p = malloc(sizeof(TEST_S));

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 15:37:43
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39937&ptid=13082]zhuangweiye 发表于 2016-10-21 15:15[/url]
pstDst这个是不是野指针?

没有给这个指针分配内存
[/quote]


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 "<        cout<<"u16Height "<
        if(NULL == pimgGray)
                {
                        printf("coming into pimgGray\n");
                        S = cvSize(pimg->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:"<         cout<<"stGMMCtrl.u8q8VarThr "<         cout<<"stGMMCtrl.u0q16LearnRate "<          
        // init
        memset(&stIveImg, 0, sizeof(IVE_SRC_IMAGE_S));
        memset(&stIveFg, 0,sizeof(IVE_DST_IMAGE_S));
        memset(&stIveBg, 0, sizeof(IVE_DST_IMAGE_S));
        //memset(&pstDst,0,sizeof(IVE_MEM_INFO_S));
       

        //init
        //SAMPLE_COMM_IVE_CheckIveMpiInit();

       

        while(getline(infile, buff))
        {
                 pimg=cvLoadImage(buff.c_str());
                if (!pimg)
                {
                        cout<<"error input image"<                         break;
                }
                cvCvtColor(pimg,pimgGray,CV_BGR2GRAY);
                cout<<"pimg->nChannels(): "<nChannels<                 cout<<"pimgGray->nChannels():   "<nChannels<
                // source image
                if(HI_NULL == stIveImg.pu8VirAddr[0])
                {
                s32Result = SAMPLE_COMM_IVE_CreateImage(&stIveImg,IVE_IMAGE_TYPE_U8C1,u16Width,u16Height);
                cout<<"s32Result stIveImg HI_CreateIveImage "<                 }
                //cout<                 memcpy(stIveImg.pu8VirAddr[0],pimgGray->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 "<
                }
                //cout<                 memcpy(stIveFg.pu8VirAddr[0],pimgGray->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 "<                 //HI_CHECK_ET_GOTO(s32Result,HI_FAILURE,FAILURE);
                }
                //cout<                 memcpy(stIveBg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);


                //pstModel
                cout<<"pimg->width"<width<                 cout<<"pimg->height"<height<                 //cout<<"stGMMCtrl.u8ModelNum "<                 pstDst->u32Size = stGMMCtrl.u8ModelNum * 7 * pimg->width * pimg->height;
                cout<<"pstDst->u32Size "<u32Size<                 s32Result  = SAMPLE_COMM_IVE_CreateMemInfo(pstDst, pstDst->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"<
cout< cout< cout< cout<u32PhyAddr<<" "<<"pstDst->u32PhyAddr"<
s32Result = HI_MPI_IVE_GMM(&hIveHandle,&stIveImg,&stIveFg,&stIveBg,pstDst,&stGMMCtrl,bInstant);
if (HI_SUCCESS != s32Result)
    {
       printf("s32Result (%#x)\n", s32Result);
    }
                end_t = clock();
                long cost_t = (long)(end_t - start_t);
                cout<<"cost_t: "<                 if(HI_SUCCESS != s32Result)
                {
                        goto FAILURE;
                }

                if(pfg == HI_NULL)
                {
                        S = cvSize(pimg->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
}

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 15:38:18
认可0
我改了一下 还是不行 还是得麻烦大神帮我看一下

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 15:45:39
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39937&ptid=13082]zhuangweiye 发表于 2016-10-21 15:15[/url]
pstDst这个是不是野指针?

没有给这个指针分配内存
[/quote]

麻烦大神在帮我看一下 我初始化了  pstDst = (IVE_MEM_INFO_S *)malloc(sizeof(IVE_MEM_INFO_S));
但是还是报:401460224  stIveImg.u32PhyAddr[0]
2401538048  stIveFg.u32PhyAddr[0]
2401615872  stIveBg.u32PhyAddr[0]
pstImage-> u32PhyAddr[0] can not be zero
check image pstSrc failed
check GMM parameters failed.
s32Result is  0xA01D8003  

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 16:06:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39947&ptid=13082]joyup 发表于 2016-10-21 15:45[/url]
麻烦大神在帮我看一下 我初始化了  pstDst = (IVE_MEM_INFO_S *)malloc(sizeof(IVE_MEM_INFO_S));
但是 ...[/quote]

楼主把 几个开MMZ内存的代码都移到循环前面去

另外在循环里面加个计数, 并打印出来, 把完整的运行log 贴一下

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 16:29:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39954&ptid=13082]zhuangweiye 发表于 2016-10-21 16:06[/url]
楼主把 几个开MMZ内存的代码都移到循环前面去

另外在循环里面加个计数, 并打印出来, 把完整的运行log  ...[/quote]


typedef struct tagGauss
{
   HI_S16  sWidth;
   HI_S16  sHeight;
   IVE_SRC_IMAGE_S stIveImg;
   IVE_DST_IMAGE_S stFgImg;
   IVE_DST_IMAGE_S stBgImg;
   IVE_GMM_CTRL_S stGMMCtrl;
   IVE_MEM_INFO_S stDst;
}GAUSS_S;

void CreateGauss(GAUSS_S* pstSGauss, HI_S16 sWidth, HI_S16 sHeight)
{
        HI_S32 s32Ret;

        pstSGauss->sWidth = sWidth;
        pstSGauss->sHeight = sHeight;
       
        // input image
    memset(&pstSGauss->stIveImg,0,sizeof(IVE_SRC_IMAGE_S));
    pstSGauss->stIveImg.enType        = IVE_IMAGE_TYPE_U8C1;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stIveImg.u32PhyAddr[0], (HI_VOID **)&pstSGauss->stIveImg.pu8VirAddr[0],
                                                                                        "InputImage", HI_NULL, sWidth * sHeight);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc stFgImg memory for %x\n",s32Ret);
                 return RETURN_MEM_ERR;
        }                       
    pstSGauss->stIveImg.u16Width      = sWidth;
    pstSGauss->stIveImg.u16Height     = sHeight;
    pstSGauss->stIveImg.u16Stride[0]  = sWidth;

        // fgImg
    memset(&pstSGauss->stFgImg,0,sizeof(IVE_DST_IMAGE_S));
    pstSGauss->stFgImg.enType        = IVE_IMAGE_TYPE_U8C1;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stFgImg.u32PhyAddr[0], (HI_VOID **)&pstSGauss->stFgImg.pu8VirAddr[0],
                                                                                        "FgImg", HI_NULL, sWidth * sHeight);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc stFgImg memory for %x\n",s32Ret);
                 return RETURN_MEM_ERR;
        }                       
    pstSGauss->stFgImg.u16Width      = sWidth;
    pstSGauss->stFgImg.u16Height     = sHeight;
    pstSGauss->stFgImg.u16Stride[0]  = sWidth;

        // bgImg
    memset(&pstSGauss->stBgImg,0,sizeof(IVE_DST_IMAGE_S));
    pstSGauss->stBgImg.enType        = IVE_IMAGE_TYPE_U8C1;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stBgImg.u32PhyAddr[0], (HI_VOID **)&pstSGauss->stBgImg.pu8VirAddr[0],
                                                                                        "BgImg", HI_NULL, sWidth * sHeight);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc stBgImg memory for %x\n",s32Ret);
                 return RETURN_MEM_ERR;
        }                       
    pstSGauss->stBgImg.u16Width      = sWidth;
    pstSGauss->stBgImg.u16Height     = sHeight;
    pstSGauss->stBgImg.u16Stride[0]  = sWidth;

    memset(&pstSGauss->stGMMCtrl,0,sizeof(IVE_GMM_CTRL_S));
        pstSGauss->stGMMCtrl.u22q10NoiseVar = 15*15*(1<<10);
    pstSGauss->stGMMCtrl.u22q10MaxVar   = 2000*(1<<10);
    pstSGauss->stGMMCtrl.u22q10MinVar   = 200*(1<<10);
    pstSGauss->stGMMCtrl.u0q16LearnRate = ((1<<16)-1)/500;
    pstSGauss->stGMMCtrl.u0q16BgRatio   = 4*((1<<16)-1)/5;
    pstSGauss->stGMMCtrl.u8q8VarThr     = (HI_U16)(25*(1<<8)/4);
    pstSGauss->stGMMCtrl.u0q16InitWeight= ((1<<16)-1)/20;
    pstSGauss->stGMMCtrl.u8ModelNum     = 3;

    memset(&pstSGauss->stDst,0,sizeof(IVE_MEM_INFO_S));
    pstSGauss->stDst.u32Size    = pstSGauss->stGMMCtrl.u8ModelNum * 7 * sWidth * sHeight;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stDst.u32PhyAddr, (HI_VOID **)&pstSGauss->stDst.pu8VirAddr,
                                                                                        "Gauss-Model", HI_NULL, pstSGauss->stDst.u32Size);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc model memory for %x\n",s32Ret);
                 return RETURN_MEM_ERR;
        }                       

        memset(pstSGauss->stDst.pu8VirAddr,0,pstSGauss->stGMMCtrl.u8ModelNum * 7 * sWidth * sHeight);
        HI_MPI_SYS_MmzFlushCache(pstSGauss->stDst.u32PhyAddr, pstSGauss->stDst.pu8VirAddr, pstSGauss->stDst.u32Size);
}

void GaussProcess()
{
        IVE_HANDLE hIveHandle;
        GAUSS_S stGauss;
        GAUSS_S *pstSGauss = &stGauss;

        CreateGauss(pstSGauss, 320, 240);

        // 填写pstSGauss->stIveImg 即可
        // ...

        // GMM
        HI_MPI_IVE_GMM(&hIveHandle,&pstSGauss->stIveImg,&pstSGauss->stFgImg,&pstSGauss->stBgImg,&pstSGauss->stDst,&pstSGauss->stGMMCtrl,HI_TRUE);
}


要不用上面的代码改改试试

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 17:04:26
认可0
[code]
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;        // init frame
        HI_U32 u32Size = 0;

        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 "<        cout<<"u16Height "<
        if(NULL == pimgGray)
                {
                        printf("coming into pimgGray\n");
                        S = cvSize(pimg->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;
         
        // init
        memset(&stIveImg, 0, sizeof(IVE_SRC_IMAGE_S));
        memset(&stIveFg, 0,sizeof(IVE_DST_IMAGE_S));
        memset(&stIveBg, 0, sizeof(IVE_DST_IMAGE_S));
        //memset(&pstDst,0,sizeof(IVE_MEM_INFO_S));
       

        //init use this is ok?
        SAMPLE_COMM_IVE_CheckIveMpiInit();

        //source
        if(HI_NULL == stIveImg.pu8VirAddr[0])
        {
          s32Result = SAMPLE_COMM_IVE_CreateImage(&stIveImg,IVE_IMAGE_TYPE_U8C1,u16Width,u16Height);
          cout<<"s32Result stIveImg HI_CreateIveImage "<         }
        memcpy(stIveImg.pu8VirAddr[0],pimgGray->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 "<         }
        memcpy(stIveFg.pu8VirAddr[0],pimgGray->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 "<         }
        memcpy(stIveBg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);


        u32Size = stGMMCtrl.u8ModelNum * 7 * pimg->width * pimg->height;
        s32Result  = SAMPLE_COMM_IVE_CreateMemInfo(pstDst, u32Size);
        if (s32Result!= HI_SUCCESS)
        {
        printf("SAMPLE_COMM_IVE_CreateMemInfo fail\n");
        }
        memset(pstDst->pu8VirAddr, 0, u32Size);

       

        while(getline(infile, buff))
        {
                 pimg=cvLoadImage(buff.c_str());
                 
                if (!pimg)
                {
                        cout<<"error input image"<                         break;
                }
                cvCvtColor(pimg,pimgGray,CV_BGR2GRAY);
                cout<<"pimg->nChannels(): "<nChannels<                 cout<<"pimgGray->nChannels():   "<nChannels<                 cout<<"FrameNum "<                 time_t start_t,end_t;
                start_t = clock();
                //cout<<"will get into GMM"<
                cout<                 cout<                 cout<                 cout<u32PhyAddr<<" "<<"pstDst->u32PhyAddr"<
                s32Result = HI_MPI_IVE_GMM(&hIveHandle,&stIveImg,&stIveFg,&stIveBg,pstDst,&stGMMCtrl,bInstant);
                 if (HI_SUCCESS != s32Result)
                    {
                       printf("s32Result (%#x)\n", s32Result);
                    }
                end_t = clock();
                long cost_t = (long)(end_t - start_t);
                cout<<"cost_t: "<                 if(HI_SUCCESS != s32Result)
                {
                        goto FAILURE;
                }

                if(pfg == HI_NULL)
                {
                        S = cvSize(pimg->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
}[/code]
把mmz移到循环外面。

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-21 17:18:54
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39958&ptid=13082]zhuangweiye 发表于 2016-10-21 16:29[/url]
typedef struct tagGauss
{
   HI_S16  sWidth;
[/quote]

刚看到 我试一下回复你哈

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-21 17:38:46
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39963&ptid=13082]joyup 发表于 2016-10-21 17:18[/url]
刚看到 我试一下回复你哈[/quote]

下周一等楼主的好消息:lol

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-24 16:37:05
认可0
typedef struct tagGauss
{
   HI_S16  sWidth;
   HI_S16  sHeight;
   IVE_SRC_IMAGE_S stIveImg;
   IVE_DST_IMAGE_S stFgImg;
   IVE_DST_IMAGE_S stBgImg;
   IVE_GMM_CTRL_S stGMMCtrl;
   IVE_MEM_INFO_S stDst;
}GAUSS_S;

void CreateGauss(GAUSS_S* pstSGauss, HI_S16 sWidth, HI_S16 sHeight)
{
        HI_S32 s32Ret;

        pstSGauss->sWidth = sWidth;
        pstSGauss->sHeight = sHeight;
        
        // input image
        memset(&pstSGauss->stIveImg,0,sizeof(IVE_SRC_IMAGE_S));
        pstSGauss->stIveImg.enType        = IVE_IMAGE_TYPE_U8C1;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stIveImg.u32PhyAddr[0], (HI_VOID **)&pstSGauss->stIveImg.pu8VirAddr[0],
                                                                                        "InputImage", HI_NULL, sWidth * sHeight);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc stFgImg memory for %x\n",s32Ret);
                // return RETURN_MEM_ERR;
        }                        
        pstSGauss->stIveImg.u16Width      = sWidth;
        pstSGauss->stIveImg.u16Height     = sHeight;
        pstSGauss->stIveImg.u16Stride[0]  = sWidth;

        // fgImg
        memset(&pstSGauss->stFgImg,0,sizeof(IVE_DST_IMAGE_S));
        pstSGauss->stFgImg.enType        = IVE_IMAGE_TYPE_U8C1;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stFgImg.u32PhyAddr[0], (HI_VOID **)&pstSGauss->stFgImg.pu8VirAddr[0],
                                                                                        "FgImg", HI_NULL, sWidth * sHeight);
        if(s32Ret != HI_SUCCESS)
        {
           printf("can't alloc stFgImg memory for %x\n",s32Ret);
         //  return RETURN_MEM_ERR;
        }                        
    pstSGauss->stFgImg.u16Width      = sWidth;
    pstSGauss->stFgImg.u16Height     = sHeight;
    pstSGauss->stFgImg.u16Stride[0]  = sWidth;

        // bgImg
    memset(&pstSGauss->stBgImg,0,sizeof(IVE_DST_IMAGE_S));
    pstSGauss->stBgImg.enType        = IVE_IMAGE_TYPE_U8C1;
        s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stBgImg.u32PhyAddr[0], (HI_VOID **)&pstSGauss->stBgImg.pu8VirAddr[0],
                                                                                        "BgImg", HI_NULL, sWidth * sHeight);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc stBgImg memory for %x\n",s32Ret);
          //       return RETURN_MEM_ERR;
        }                        
    pstSGauss->stBgImg.u16Width      = sWidth;
    pstSGauss->stBgImg.u16Height     = sHeight;
    pstSGauss->stBgImg.u16Stride[0]  = sWidth;

    //pstmodel
    memset(&pstSGauss->stGMMCtrl,0,sizeof(IVE_GMM_CTRL_S));
    pstSGauss->stGMMCtrl.u22q10NoiseVar = 15*15*(1<<10);
    pstSGauss->stGMMCtrl.u22q10MaxVar   = 2000*(1<<10);
    pstSGauss->stGMMCtrl.u22q10MinVar   = 200*(1<<10);
    pstSGauss->stGMMCtrl.u0q16LearnRate = ((1<<16)-1)/500;
    pstSGauss->stGMMCtrl.u0q16BgRatio   = 4*((1<<16)-1)/5;
    pstSGauss->stGMMCtrl.u8q8VarThr     = (HI_U16)(25*(1<<8)/4);
    pstSGauss->stGMMCtrl.u0q16InitWeight= ((1<<16)-1)/20;
    pstSGauss->stGMMCtrl.u8ModelNum     = 3;

    memset(&pstSGauss->stDst,0,sizeof(IVE_MEM_INFO_S));
    cout<<"pstSGauss->stGMMCtrl.u8ModelNum "<stGMMCtrl.u8ModelNum<     pstSGauss->stDst.u32Size    = pstSGauss->stGMMCtrl.u8ModelNum * 7 * sWidth * sHeight;
    s32Ret = HI_MPI_SYS_MmzAlloc_Cached(&pstSGauss->stDst.u32PhyAddr, (HI_VOID **)&pstSGauss->stDst.pu8VirAddr,
                                                                                        "Gauss-Model", HI_NULL, pstSGauss->stDst.u32Size);
        if(s32Ret != HI_SUCCESS)
        {
                 printf("can't alloc model memory for %x\n",s32Ret);
              //   return RETURN_MEM_ERR;
        }                        

        memset(pstSGauss->stDst.pu8VirAddr,0,pstSGauss->stGMMCtrl.u8ModelNum * 7 * sWidth * sHeight);
        HI_MPI_SYS_MmzFlushCache(pstSGauss->stDst.u32PhyAddr, pstSGauss->stDst.pu8VirAddr, pstSGauss->stDst.u32Size);
}

int main()
{
        IVE_HANDLE hIveHandle;
        GAUSS_S stGauss;
        GAUSS_S *pstSGauss = &stGauss;
        CvSize S;

        string buff = "list1.txt";
        const char * outputDir = "output";

        ifstream infile;

        IplImage *pimgGray=NULL;
        IplImage *pfg=NULL;
        IplImage *pfgRGB=NULL;
        IplImage *pBgGray=NULL;
        HI_S32 s32Result;      

        infile.open(buff.c_str());
        getline(infile, buff);

        IplImage * pimg=cvLoadImage(buff.c_str());
        HI_U16 u16Width=pimg->width;
        HI_U16 u16Height=pimg->height;

        HI_U32   FrameNum = 1;      
        CreateGauss(pstSGauss, 320, 240);




        while(getline(infile, buff))
        {
                 pimg=cvLoadImage(buff.c_str());
                 
                 
                if (!pimg)
                {
                        cout<<"error input image"<                         break;
                }
               
                if(NULL == pimgGray)
                {
                        printf("coming into pimgGray\n");
                        S = cvSize(pimg->width,pimg->height);
                        pimgGray = cvCreateImage(S,8,1);
                        if(HI_NULL == pimgGray)
                        {
                                printf("pimgGray creat error");
                                //goto FAILURE;
                        }
               }
                cvCvtColor(pimg,pimgGray,CV_BGR2GRAY);
                cout<<"pimg->nChannels(): "<nChannels<                 cout<<"pimgGray->nChannels():   "<nChannels<                 cout<<"FrameNum "<                 //memcpy(pstSGauss->stIveImg.pu8VirAddr[0],pimgGray->imageData,pimgGray->width * pimgGray->height);
                //memcpy(pstSGauss->stFgImg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);
                //memcpy(pstSGauss->stBgImg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);
               
                cout<<"here1"<                 // for testing
                if(HI_NULL == pBgGray)
                {
                        S = cvSize(pimgGray->width,pimgGray->height);
                        pBgGray = cvCreateImage(S,8,1);
                        if(HI_NULL == pBgGray)
                        {
                                goto FAILURE;
                        }
                }
                cout<<"here2"<                 cvSaveImage("aa4.jpg",pimgGray);
                memcpy(pBgGray->imageData,pstSGauss->stBgImg.pu8VirAddr[0], pBgGray->width * pBgGray->height);
                cout<<"here3"<                 cvSaveImage("bb4.jpg",pBgGray);
                cout<stIveImg.u32PhyAddr[0]<<" "<<"pstSGauss->stIveImg.u32PhyAddr[0]"<                 cout<stFgImg.u32PhyAddr[0]<<" "<<"pstSGauss->stFgImg.u32PhyAddr[0]"<                 cout<stBgImg.u32PhyAddr[0]<<" "<<"pstSGauss->stBgImg.u32PhyAddr[0]"<                 cout<stDst.u32PhyAddr<<" "<<"pstSGauss->stDst.u32PhyAddr"<
               
                time_t start_t,end_t;
                // GMM
      s32Result=HI_MPI_IVE_GMM(&hIveHandle,&pstSGauss->stIveImg,&pstSGauss->stFgImg,&pstSGauss->stBgImg,&pstSGauss->stDst,&pstSGauss->stGMMCtrl,HI_TRUE);
                if (HI_SUCCESS != s32Result)
                    {
                       printf("s32Result (%#x)\n", s32Result);
                    }
                end_t = clock();
                long cost_t = (long)(end_t - start_t);
                cout<<"cost_t: "<                 if(HI_SUCCESS != s32Result)
                {
                        goto FAILURE;
                }

                if(pfg == HI_NULL)
                {
                        S = cvSize(pimg->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, pstSGauss->stFgImg.pu8VirAddr[0],pimg->width * pimg->height);
               
                //memcpy(pBgGray->imageData,pstSGauss->stBgImg.pu8VirAddr[0],pimg->height * stIveBg.u16Stride[0]);
                //cvCvtColor( pfg, pfgRGB, CV_GRAY2BGR );

                FrameNum++;
        }
FAILURE:
         IVE_MMZ_FREE(pstSGauss->stIveImg.u32PhyAddr[0],pstSGauss->stIveImg.pu8VirAddr[0]);
         IVE_MMZ_FREE(pstSGauss->stFgImg.u32PhyAddr[0], pstSGauss->stFgImg.pu8VirAddr[0]);
         IVE_MMZ_FREE(pstSGauss->stBgImg.u32PhyAddr[0], pstSGauss->stBgImg.pu8VirAddr[0]);
        // IVE_MMZ_FREE(pstSGauss.stDst->u32PhyAddr, pstSGauss.stDst->pu8VirAddr);

        if(HI_NULL != pfgRGB)
                cvReleaseImage(&pfgRGB);
        if(HI_NULL != pfg)
                cvReleaseImage(&pfg);
        if(HI_NULL != pBgGray)
                cvReleaseImage(&pBgGray);
       
        return -1;
}

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-24 16:48:50
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40048&ptid=13082]joyup 发表于 2016-10-24 16:37[/url]
typedef struct tagGauss
{
   HI_S16  sWidth;
[/quote]

什么情况, 运行log没有贴

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-24 16:51:01
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=40048&ptid=13082]joyup 发表于 2016-10-24 16:37[/url]
typedef struct tagGauss
{
   HI_S16  sWidth;
[/quote]

你好 我改用了你的函数 还是不正确
http://blog.csdn.net/keyanxiaocaicai/article/details/52913043
今天找不到贴打印log的按钮了 暂时先贴在这个位置
发现问题点:
1. //memcpy(pstSGauss->stIveImg.pu8VirAddr[0],pimgGray->imageData,pimgGray->width * pimgGray->height);
                //memcpy(pstSGauss->stFgImg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);
                //memcpy(pstSGauss->stBgImg.pu8VirAddr[0],pimgGray->imageData, pimgGray->width * pimgGray->height);

我把这三句全部注释掉了 但是 我打印输出cvSaveImage("aa4.jpg",pimgGray);
和cvSaveImage("bb4.jpg",pBgGray); 按道理应该是会报错的。但是打印出来的图片都是pimgGray 的图片
2.发现在打印log 中标出来的红色框里面的stIveImg.u32PhyAddr[0] stFgImg.u32PhyAddr[0] stBgImg.u32PhyAddr[0] 没次都是一样的。

joyup

0个粉丝

10

问答

0

专栏

3

资料

joyup 2016-10-24 17:00:18
认可0
本帖最后由 joyup 于 2016-10-24 17:02 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=40052&ptid=13082]zhuangweiye 发表于 2016-10-24 16:48[/url]
什么情况, 运行log没有贴[/quote]

1.运行log 和 bb4.jpg aa4.jpg 都有输出。应该是没有输出的。
2. 运行log 里面的stIveImg.u32PhyAddr[0] 等 地址 每次运行都一样 从来不变化

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-10-24 17:04:52
认可0
本帖最后由 zhuangweiye 于 2016-10-24 17:08 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=40056&ptid=13082]joyup 发表于 2016-10-24 17:00[/url]
1.运行log 和 bb4.jpg aa4.jpg 都有输出。应该是没有输出的。
2. 运行log 里面的stIveImg.u32PhyAddr[ ...[/quote]

这几个物理地址当然是不变的, 因为并没有重新分配

楼主做一个测试, 把while() 中cv相关代码都屏蔽掉, 只留一个 IVE 算子, 看看能不能跑通

最好把代码中和HMM无关的代码都屏蔽掉

不用给那几个buffer copy 数据
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区