Я пытаюсь извлечь буквы отдельно из изображения opencv, но у меня возникают трудности в некоторых случаях.Иногда случается, что он берет одну и ту же букву и делит ее посередине.В некоторых случаях, таких как буква «i», он не может поднять точку и считает ее другим символом.Ниже у меня есть 3 примера входного изображения, после применения функции эрозии и после поиска контура для извлечения букв.
Пример изображения
И мой фрагмент кода:
import cv2
import numpy as np
import imutils
img = cv2.imread('captchas/image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU|cv2.THRESH_BINARY_INV)[1]
kernel = np.ones((5,4), np.uint8)
img_erode = cv2.erode(thresh, kernel, iterations = 1)
contours = cv2.findContours(img_erode.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
contours = contours[0] if imutils.is_cv2() else contours[1]
letter_image_regions = []
output = img_erode.copy()
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
if cv2.contourArea(contour) > 200:
if w / h > 0.75:
half_width = int(w / 2)
cv2.rectangle(output, (x, y), (x + half_width, y + h), (70,0,70), 3)
cv2.rectangle(output, (x, y), (x + w, y + h), (70,0,70), 3)
else:
cv2.rectangle(output, (x, y), (x + w, y + h), (70,0,70), 3)
cv2.imshow("Input", img)
cv2.imshow("Erode", img_erode)
cv2.imshow("Output", image)
cv2.waitKey(0)