【图像处理实战】去除光照不均(Python)

这篇文章主要是对参考文章里面实现一种小拓展:

  • 可处理彩色图片(通过对 HSV 的 V 通道进行处理)
  • 本来想将嵌套循环改成矩阵运算的,但是太麻烦了,而且代码也不好理解,所以放弃了。

代码

python 复制代码
import cv2
import numpy as np


def light_compensate_hsv(src, grid_num):
    src_hsv = cv2.cvtColor(src, cv2.COLOR_BGR2HSV)
    src_v = src_hsv[:, :, 2]

    avg = np.mean(src_v)
    h, w = src_v.shape[:2]
    grid_row, grid_col = np.ceil(np.asarray([h, w]) / grid_num).astype(int)
    img_grid = np.zeros((grid_row, grid_col, 1), dtype=np.float32)

    for row in range(grid_row):
        for col in range(grid_col):
            img_roi = src_v[row * grid_num:                                           # row start
                            (row + 1) * grid_num if (row + 1) * grid_num < h else h,  # row end
                            col * grid_num:                                           # col start
                            (col + 1) * grid_num if (col + 1) * grid_num < w else w]  # col end

            img_grid[row, col] = np.mean(img_roi) - avg

    mask = cv2.resize(img_grid, (w, h), interpolation=cv2.INTER_CUBIC)
    mask = cv2.GaussianBlur(mask, (3, 3), 0)
    dst_v = np.uint8(np.float32(src_v) - mask)

    src_hsv[:, :, 2] = dst_v
    return cv2.cvtColor(src_hsv, cv2.COLOR_HSV2BGR)


def display(img):
    cv2.namedWindow('img', cv2.WINDOW_NORMAL)
    cv2.imshow('img', img)
    cv2.waitKey()


if __name__ == '__main__':
    image = cv2.imread(r'light_compensate_test_2.png')
    image_res = light_compensate_hsv(image, 16)

    res = np.hstack([image, image_res])
    display(res)

效果图

图也是用的参考文章里面的原图进行处理的。


最后一张是我自己的测试图,对于某些图来说效果比较好,可以用在文档阴影去除上。

参考文章

相关推荐
靠近彗星3 分钟前
基于 Vue + Django + MySQL 实现个人博客/CMS系统
前端·vue.js·python·mysql·django
励志成为大佬的小杨18 分钟前
pytorch模型的进阶训练和性能优化
人工智能·pytorch·python
知舟不叙27 分钟前
OpenCV的基础操作
人工智能·opencv·计算机视觉
m0_490240671 小时前
软件自动化测试(1):python+selenium自动化测试环境搭建
开发语言·python·selenium
橘猫云计算机设计1 小时前
基于ssm的食物营养成分数据分析平台设计与实现(源码+lw+部署文档+讲解),源码可白嫖!
后端·python·信息可视化·数据挖掘·数据分析·django·毕业设计
liuhaoran___3 小时前
计算机求职面试中高频出现的经典题目分类整理
python
AI绘画月月3 小时前
AI绘画 | Stable Diffusion 图片背景完美替换
图像处理·人工智能·计算机视觉·ai作画·stable diffusion·midjourney·sd
jndingxin3 小时前
OpenCV 图形API(4)内核 API
opencv
不辉放弃3 小时前
零基础讲解pandas
开发语言·python
databook4 小时前
线性判别分析(LDA):降维与分类的完美结合
python·机器学习·scikit-learn