У меня есть набор изображений, которые представляют буквы, извлеченные из изображения слова.На некоторых изображениях есть остатки соседних букв, и я хочу устранить их, но я не знаю как.
Некоторые образцы
Я работаю с openCV, и я попробовал два способа, и ни один не работает.
С помощью findContours:
def is_contour_bad(c):
return len(c) < 50
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
edged = cv2.Canny(gray, 50, 100)
contours = cv2.findContours(edged.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if imutils.is_cv2() else contours[1]
mask = np.ones(image.shape[:2], dtype="uint8") * 255
for c in contours:
# if the c ontour is bad, draw it on the mask
if is_contour_bad(c):
cv2.drawContours(mask, [c], -1, 0, -1)
# remove the contours from the image and show the resulting images
image = cv2.bitwise_and(image, image, mask=mask)
cv2.imshow("After", image)
cv2.waitKey(0)
Я думаю, что это не работает, потому что изображение на краю cv2.drawContours не может правильно рассчитать площадь и не устраняет внутренние точки
С компонентом connectedComponentsWithStats:
cv2.imshow("Image", img)
cv2.waitKey(0)
nb_components, output, stats, centroids = cv2.connectedComponentsWithStats(img)
sizes = stats[1:, -1];
nb_components = nb_components - 1
min_size = 150
img2 = np.zeros((output.shape))
for i in range(0, nb_components):
if sizes[i] >= min_size:
img2[output == i + 1] = 255
cv2.imshow("After", img2)
cv2.waitKey(0)
В этом случае я не знаю, почему мелкие элементы по бокам не распознают их как подключенные компоненты
Хорошо .. Я был бы очень признателен любомупомощь!