可以用自适应阈值分割实现光照不均现象,也可以利用顶帽变换实现。两者选卷积核的时候都一般要比目标(通常是文字)大。

效果

从左往右依次为:原图、原图颜色反转黑白颠倒、开运算、顶帽变换、颜色反转回来

drawing
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

def show(img):
    if img.ndim == 2:
        plt.imshow(img, cmap='gray')
    else:
        img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
        plt.imshow(img)
    plt.show()

## 正文开始
I0 = cv.imread(img_path, 0) # img_path 为原图路径
I = 255 - I0                # 颜色反转

K = cv.getStructuringElement(cv.MORPH_ELLIPSE, (21,21)) # 21x21 比文字大小略大
I_tophat = cv.morphologyEx(I, cv.MORPH_TOPHAT, K)  # 顶帽变换结果

I_open = cv.morphologyEx(I, cv.MORPH_OPEN, K) 
I_top = cv.subtract(I, I_open) # 顶帽变换结果2,I_top 与 I_tophat 一样。

_, img_bin2 = cv.threshold(I_top, 30, 255, cv.THRESH_BINARY_INV) # 阈值化

plt.imshow(np.hstack([I0, I, I_open, I_top, img_bin2]))
plt.show()

说明:

  1. 未经许可,谢绝转载。
  2. 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
    免费视频教程为0-6章(标题号≤6),可在此处点击观看。
    所有课件及源代码可在此处下载:
    链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
    提取码:11o4
    有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。