Есть много способов, как решить вашу проблему. Например, если линии, которые образуют ваши ячейки, связаны - вы можете фильтровать большие связанные компоненты, используя opencv.
gray = cv2.imread('path_to_your/image.png', 0)
_, blackAndWhite = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
nlabels, labels, stats, centroids = cv2.connectedComponentsWithStats(blackAndWhite, None, None, None, 8, cv2.CV_32S)
sizes = stats[1:, -1]
img2 = np.zeros((labels.shape), np.uint8)
for i in range(0, nlabels - 1):
if sizes[i] <= 5000: #CHANGE THIS VALUE TO CHANGE THRESHOLD.
img2[labels == i + 1] = 255
res = cv2.bitwise_not(img2)
cv2.imshow('res.png', res)
cv2.waitKey(0)
Другие подходы включают, но не ограничиваются этим, обнаружение букв путем нахождения контуров или выполнения морфологических операций, с использованием эвристики, такой как тот факт, что буквы должны находиться на одной строке и т. Д. *