光照不均匀处理

图像处理中,如果图像中存在光照不均匀,则会影响图像处理的效果,比如在图像文本识别和图像分割中。本博客对于图像均衡化的处理主要参考文章:一种基于亮度均衡的图像阈值分割技术,以有关于C++的实现代码:opencv 一种不均匀光照的补偿方法

使用该方法主要的原因是最近在弄Tesseract的文字识别,需要识别拍摄照片中的字母,但是照片为室外拍摄,具有不同的光照影响,导致识别率很低,因此采用该方法进行处理,最后有效的提升了识别率,实现有光照影响的Tesseract文字识别。

全部代码如下:

import cv2 import numpy as np  def unevenLightCompensate(img, blockSize):     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)     average = np.mean(gray)      rows_new = int(np.ceil(gray.shape[0] / blockSize))     cols_new = int(np.ceil(gray.shape[1] / blockSize))      blockImage = np.zeros((rows_new, cols_new), dtype=np.float32)     for r in range(rows_new):         for c in range(cols_new):             rowmin = r * blockSize             rowmax = (r + 1) * blockSize             if (rowmax > gray.shape[0]):                 rowmax = gray.shape[0]             colmin = c * blockSize             colmax = (c + 1) * blockSize             if (colmax > gray.shape[1]):                 colmax = gray.shape[1]              imageROI = gray[rowmin:rowmax, colmin:colmax]             temaver = np.mean(imageROI)             blockImage[r, c] = temaver      blockImage = blockImage - average     blockImage2 = cv2.resize(blockImage, (gray.shape[1], gray.shape[0]), interpolation=cv2.INTER_CUBIC)     gray2 = gray.astype(np.float32)     dst = gray2 - blockImage2     dst = dst.astype(np.uint8)     dst = cv2.GaussianBlur(dst, (3, 3), 0)     dst = cv2.cvtColor(dst, cv2.COLOR_GRAY2BGR)      return dst  if __name__ == '__main__':     file = 'refined_receipt.jpg'     blockSize = 16     img = cv2.imread(file)     dst = unevenLightCompensate(img, blockSize)      result = np.concatenate([img, dst], axis=1)      cv2.imshow('result', result)     cv2.waitKey(0) 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

效果如下所示:
result
调节的参数有blockSize的尺寸,以及最后的高斯去噪GaussianBlur和其核的大小,本文取的3.

没有评论: