可以用自适应阈值分割实现光照不均现象,也可以利用顶帽变换实现。两者选卷积核的时候都一般要比目标(通常是文字)大。
效果
从左往右依次为:原图、原图颜色反转黑白颠倒、开运算、顶帽变换、颜色反转回来
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()
说明:
- 未经许可,谢绝转载。
- 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
免费视频教程为0-6章(标题号≤6),可在此处点击观看。
所有课件及源代码可在此处下载:
链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
提取码:11o4
有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。在本文评论指出可能导致回复很晚。