File size: 1,661 Bytes
38744b1 |
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 47 48 49 50 51 52 53 54 55 56 |
import os
import cv2
import numpy as np
from PIL import Image
# Some image process techniques to improve the images.
class ImageProcessor():
def __init__(self):
pass
def PIL_to_cv2(self, pil_img):
return cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)
def cv2_to_PIL(self, cv_img):
return Image.fromarray(cv2.cvtColor(cv_img, cv2.COLOR_BGR2RGB))
def image_padding(self, image, padd):
'''
Image boarder padding to avoid table image loss
'''
width, height = image.size
new_width = width +(2*padd)
new_height = height + (2*padd)
color = (255, 255, 255)
result = Image.new(image.mode, (new_width, new_height), color)
result.paste(image, (padd, padd))
return result
def sharpen_image(self, pil_img):
img = self.PIL_to_cv2(pil_img)
'''
Image sharpening kernal
'''
sharpen_kernel = np.array([[-1, -1, -1],
[-1, 9, -1],
[-1, -1, -1]])
sharpen = cv2.filter2D(img, -1, sharpen_kernel)
pil_img = self.cv2_to_PIL(sharpen)
return pil_img
def binarizeBlur_image(self, pil_img):
image = self.PIL_to_cv2(pil_img)
thresh = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV)[1]
result = cv2.GaussianBlur(thresh, (3,3), 0)
result = 255 - result
return self.cv2_to_PIL(result)
def whole_image_processing(self, pil_img):
sharpen_img = self.sharpen_image(pil_img)
binary_img = self.binarizeBlur_image(sharpen_img)
return binary_img
|