У меня есть изображения некоторых керамических тарелок. Показанный ниже пример худшего из партии. У меня возникают проблемы с предварительной обработкой перед использованием tesseract для получения текста (если это возможно). Если бы кто-то мог дать мне толчок в правильном направлении, то это было бы замечательно.
Пример необработанного изображения:
Плита необработанная
![enter image description here](https://i.stack.imgur.com/1Sbwu.jpg)
Я пробовал несколько вещей сам за последние 4 дня, и лучшее, что я мог придумать, это:
результирующее предварительно обработанное изображение
![enter image description here](https://i.stack.imgur.com/F2RTx.png)
Что касается кода, который я использовал:
import os
import numpy as np
import matplotlib.pyplot as plt
try:
from cv2 import cv2
except ImportError:
pass
cwd = os.path.dirname(os.path.abspath(__file__))
input_dir_path = cwd + '/data/input'
output_dir_path = cwd + '/data/output'
input_image_names = os.listdir(input_dir_path)
def nothing(x):
pass
def makeValueOdd(value):
if (value % 2) is not 0:
return value
return value + 1
wnd = 'Test'
cv2.namedWindow(wnd, cv2.WINDOW_NORMAL)
cv2.createTrackbar("Threshold", wnd, 127, 255, nothing)
cv2.createTrackbar("Blur", wnd, 3, 255, nothing)
cv2.createTrackbar("Lower_gray", wnd, 100, 255, nothing)
cv2.createTrackbar("Higher_gray", wnd, 255, 255, nothing)
img = cv2.imread(input_dir_path + '/' + input_image_names[0])
clahe = cv2.createCLAHE(clipLimit=4.3, tileGridSize=(8,8))
while (1):
thresh_bin_val = cv2.getTrackbarPos("Threshold", wnd)
blur_kernel_value = (makeValueOdd(cv2.getTrackbarPos("Blur", wnd)),
makeValueOdd(cv2.getTrackbarPos("Blur", wnd)))
lower_val = cv2.getTrackbarPos("Lower_gray", wnd)
higher_val = cv2.getTrackbarPos("Higher_gray", wnd)
hsv_image = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_gray = np.array([0, 0, lower_val])
higher_gray = np.array([0, 0, higher_val])
mask = cv2.inRange(hsv_image, lower_gray, higher_gray)
result = cv2.bitwise_and(img, img, mask=mask)
gray_img = cv2.cvtColor(result, cv2.COLOR_BGR2GRAY)
cl1 = clahe.apply(gray_img)
blurr = cv2.GaussianBlur(cl1, blur_kernel_value, 0)
ret, thresh1 = cv2.threshold(blurr, thresh_bin_val, 255,
cv2.THRESH_BINARY_INV)
subtract = cv2.bitwise_not(thresh1)
cv2.imshow(wnd, subtract)
k = cv2.waitKey(1) & 0xFF
if k == ord('m'):
mode = not mode
elif k == 27:
break
cv2.destroyAllWindows()