参照仿照扫描全能王python程序实现_拍照转扫描件源码-CSDN博客中的python代码,对白纸文字图片进行漂白处理,但运行结果与这篇博客文章里面展示的结果不一致。
原因在于,在进行图像除法的过程中,图像数组的一些值已经超过了uint8的最大值255
print(img.min(), img.max())
# 38.585526 388.11322
直接将值转换为uint8的话,则会造成溢出,进而导致结果错误。在转换之前,需要使用np.clip对数据进行截尾处理
img = np.clip(img, 0, 255).astype(np.uint8)
再次运行,结果就正常了
全部代码如下
import cv2
import numpy as np
from scipy.ndimage import gaussian_filter
def gauss_division(image):
'''高斯滤波,图像除法
image cv2'''
src1 = image.astype(np.float32)
gauss = gaussian_filter(image, sigma=50)
gauss1 = gauss.astype(np.float32)
dst1 = (src1 / gauss1) * 255
print(dst1.min())
return dst1
img = cv2.imread(r"C:\Users\Administrator\Desktop\20200710095315856.jpg")
cv2.namedWindow('img', cv2.WINDOW_NORMAL)
img = gauss_division(img)
img = np.clip(img, 0, 255).astype(np.uint8)
cv2.imshow('img', img, )
cv2.waitKey()