Лучший способ обрезать букву на изображении в python - PullRequest
0 голосов
/ 26 марта 2020

Я работаю над OCR как часть моего исследования. Я хочу обрезать букву на изображении так, чтобы каждое изображение обрезки имело только один символ, я обрезал несколько букв на изображениях, но они перекрывают друг друга.

это изображение, которое у меня есть enter image description here

это код, который я написал для письма обрезки

for image in os.listdir("ab"):
    image_path = os.path.join("ab", image)
    img = Image.open(image_path)
    for j in range(30, 181, 30):
        ct += 1
        character_path = os.path.join("x-chars", str(ct) + ".png")
        ch = img.crop((j-50, 30, j, 50)) #here i am getting problem 
        ch.save(character_path)

1 Ответ

0 голосов
/ 26 марта 2020

Я обновил решение для работы на Python 3.7

import sys,os
import numpy as np
from PIL import Image
from skimage import measure
try:
    from skimage import filters
except ImportError:
    from skimage import filter as filters

# Init values
n = 2
img = Image.open("test.jpg")
data = np.array(img)
xlen = len(data[:,0])
ylen = len(data[0,:])

# Finds tha max and min value from the array
maxv = max(data.flatten())
minv = min(data.flatten())

# Data segmentation process
data = filters.gaussian(data, sigma = 1/n)
blobs = data > 0.8*(data.mean()) # Also play with this value
labels = measure.label(blobs)
setL = set(filter(lambda a : a !=0, labels.flatten()))
arrLab = []
lstPath=[]

# output dir
out_path = 'Segmentacion/'
if not os.path.isdir(out_path):
    os.makedirs(out_path)

# Binarization of the image
for i in range(1,len(setL),1):
    data2 = labels.astype('uint8')
    data2[data2 != i] = minv
    data2[data2 == i] = maxv
    arrLab.append(data2)

# Size limit Play with this value
limit = 100

# Write the value of the array
for ik in range(0,len(arrLab),1):
    ev = arrLab[ik]
    flat = list(filter(lambda a:a!=0,ev.flatten()))
    mide = len(flat)

    # If the image is smalled than the size of the image then wirte the image.
    if mide >= limit:
        lout = Image.fromarray(ev)
        lout.save(out_path + "Img_%s.png"%ik)

Как test.jpg Я использовал это изображение:

input Image

Результат этих изображений в папке Segmentacion :

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Я использовал этот код для сегментирования изображений мозолистого тела, полученных из МРТ.

Надеюсь, это может помочь вам и направить вас в правильном направлении!

...