高斯模糊

我们的高斯模糊使用快速算法,在模糊程度比较高的情况下效果会比较接近标准的高斯模糊。
另外考虑到内存占用和计算量的问题,目前的高斯计算最小半径和步进是25像素,后续将继续优化。

备注

高斯模糊 会用到NNACC以及EPIC,注意错开使用。

使用示例


static void gauss_done_cbk(void)
{
    rt_sem_release(asyn_blur_sem);

}

static void main(int argc, char **argv)
{
    uint16_t radius = 30;

    BlurDataType blur_in, blur_out;

    uassert_true_ret(output_buf != NULL);


    /*
        输入数据: 输入格式颜色没有特比要求,EPIC能识别的即可。
                   尺寸不能超过EPIC混叠的最大限制(一般是1024x1024像素)
    */
    blur_in.data = (uint8_t *) MAINMENU_RGB565.data;
    blur_in.color_mode = MAINMENU_RGB565.format;
    blur_in.width = MAINMENU_RGB565.width;
    blur_in.height = MAINMENU_RGB565.height;

    /**
        输出数据:尺寸,格式可以和输入不一样。
                  bufffer可以和输入数据共用一个。
                  
                  输出格式仅支持RGB颜色
    */
    blur_out.data = (uint8_t *) output_buf;
    blur_out.color_mode = EPIC_OUTPUT_RGB565;
    blur_out.width = OUTPUT_WIDTH;
    blur_out.height = OUTPUT_HEIGHT;




    /*初始化参数,申请中间内存等*/
    void *p_gauss = gauss_init(&blur_in, &blur_out, radius);
    if (p_gauss)
    {
        /*执行模糊算法*/
        if (RT_EOK == gauss_start_IT(p_gauss, gauss_done_cbk))
        {
            if(RT_EOK == rt_sem_take(asyn_blur_sem, rt_tick_from_millisecond(100)))
            {
                /*完成,显示到屏幕*/
                LOG_I("Draw to lcd");
                output_to_lcd(output_buf);
            }
        }

        /*释放内存*/
        gauss_deinit(p_gauss);
    }



}