浏览器搜索“全能扫描王 光照处理”,获得信息为:

camscanner(扫描全能王)功能解析与复现 - 页面增强 - 机器视觉+图像算法 - 博客园

这里给了一套光照处理的算法:

问题规范为图像A,B,为同一场景在不一样的光照拍摄图片,那么:

光照分布 L = A / B

如果已知 A, L ,则 B = A / L (B 为A去光照的结果)

这里L约等于 gaussFilter(A, 大核)

算法流程:

1、基于图像尺寸计算高斯模糊核r大小,必须是奇数

2、图像进行高斯模糊处理

3、每个像素进行 A / L,获得增强后的新图片

        由于是C++的实现,可以改写为python实现,python中nnumpy处理较慢,优化为使用numba进行加速。然后用大模型进行代码翻译,prompt为

基于numba将这段代码翻译为python:
cv::Mat pageEnhance(cv::Mat &xin)
{
    cv::Mat fin;
    int r = (int)(sqrt((float)xin.cols * xin.rows) / 32.0f) + 1;
    cv::GaussianBlur(xin, fin, cv::Size(r + r + 1, r + r + 1), 0.0f);

    int clen = xin.channels() * xin.cols;
    cv::Mat xout = xin.clone();
    for (int j = 0; j < xout.rows; j++)
    {
        uchar *po = xout.row(j).ptr<uchar>();
        uchar *pf = fin.row(j).ptr<uchar>();
        for (int i = 0; i < clen; i++)
        {
            po[i] = (pf[i] == 0) ? 0 : (uchar)std::min(255.0f, 255.0f * po[i] / pf[i]);
        }
    }
    return xout;
}

效果:速度很快,3秒内完成1张图片的渲染;渲染后类似扫描的白底黑字效果

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐