Я пытаюсь создать рукописную текстовую систему для сравнения каждого текста, как они различаются друг с другом. Мне нужно извлечь сегмент строки, чтобы создать каждое изображение для каждого текста, а затем продолжить работу для различия изображений. Я попытался сослаться на код, размещенный здесь. https://i.stack.imgur.com/lLXfD.jpg
вот мой код в отсортированных контурах, но он не создает правильную граничную рамку.
import cv2
import numpy as np
import imutils
#sort contours
def sort_contours(cnts):
# initialize the reverse flag and sort index
reverse = False
i = 1
boundingBoxes = [cv2.boundingRect(c) for c in cnts]
(cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),
key=lambda b:b[1][i], reverse=reverse))
# return the list of sorted contours and bounding boxes
return (cnts)
#import image
image = cv2.imread("002.jpg")
cv2.imshow('orig',image)
#grayscale
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
cv2.waitKey(0)
#binary
#ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV|cv2.THRESH_OTSU)
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY_INV)
cv2.imshow('binary',thresh)
cv2.waitKey(0)
#dilation
kernel = np.ones((5,100), np.uint8)
#kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (5, 150))
img_dilation = cv2.dilate(thresh, kernel, iterations=1)
cv2.imshow('dilated',img_dilation )
cv2.waitKey(0)
#find contours
ctrs= cv2.findContours(img_dilation.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
# loop over the (now sorted) contours
sorted_ctrs = sort_contours(imutils.grab_contours(ctrs))
for i, ctr in enumerate(sorted_ctrs):
# Get bounding box
x, y, w, h = cv2.boundingRect(ctr)
# Getting ROI
roi = image[y:y+h, x:x+w]
# show ROI
cv2.imshow('segment no:'+str(i),roi)
cv2.rectangle(image,(x,y),( x + w, y + h ),(90,0,255),2)
cv2.waitKey(0)
cv2.imshow('marked areas',image)
cv2.imwrite('bounded_box_image.png',image)
cv2.waitKey(0)
Я ценю предложения. Спасибо