ли взглянуть на этот подход. Это не так аккуратно, но вы можете усовершенствовать его в соответствии с вашими потребностями.
я получил на ключевые точки данного изображения с помощью cv2.ORB_create()
, для которого я получил это:
img = cv2.imread(filename,0)
orb = cv2.ORB_create()
kp = orb.detect(img,None)
kp, des = orb.compute(img, kp)
img2 = cv2.drawKeypoints(img,kp,None,color=(0,255,0), flags=0)
cv2.imshow('keypoint_on_text.jpg', img2)

Вы можете использовать surf
для лучшего выявления ключевых точек.
Затем я получил изображение, имеющее сплошной цвет (черный в этом случае), имеющий ту же форму, что и изображение. Я нарисовал эти полученные ключевые точки на этом черном изображении.
mask = np.zeros((img.shape[0], img.shape[1], 3), np.uint8)
mask[:] = (0, 0, 0)
fmask = cv2.drawKeypoints(mask,kp,None,color=(0,255,0), flags=0)
cv2.imshow('fmask.jpg', fmask)

Теперь я преобразовал это изображение в оттенках серого и применяется порог бинаризации его. Затем я нашел контуры на этом изображении и нарисовал их с большим радиусом.
graymask = cv2.cvtColor(fmask,cv2.COLOR_BGR2GRAY)
ret, th = cv2.threshold(graymask, 50, 255, 0)
_, contours , _= cv2.findContours(th,2,1)
rep = cv2.drawContours(fmask, contours, -1, (0,255,0), 5)
cv2.imshow('contours.jpg',rep)

я преобразовал это полутоновый, бинаризуюсь его и замаскирован его с исходным изображением, чтобы, наконец, получить это:
repmask = cv2.cvtColor(rep,cv2.COLOR_BGR2GRAY)
ret, th1 = cv2.threshold(repmask, 50, 255, 0)
res = cv2.bitwise_and(img,img,mask = th1)
cv2.imshow('Only_Text.jpg',res)

Как вы можете видеть, некоторые отображаются части желаемого текста. Если вы используете обнаружение surf
, вы сможете получить больше части текста.
Для этого вам может понадобиться идентифицировать объект в контексте. Затем, если 'keypoint' находится внутри обнаруженного объекта, вы можете выделить этот конкретный объект –
Как вы определяете объект в контексте? –
Можете ли вы загрузить образ, который вы работаете с –