Я пытаюсь понять часть программы распознавания цифр, которая использует OpenCV.
Учитывая пороговое изображение im_th
,
Эта часть получает ограничивающие прямоугольники контуров визображение:
ctrs, hier = cv2.findContours(im_th.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rects = [cv2.boundingRect(ctr) for ctr in ctrs]
... и эта часть получает ROI, который соответствует каждому ограничивающему прямоугольнику:
for rect in rects:
# Draw the rectangles
cv2.rectangle(im, (rect[0], rect[1]), (rect[0] + rect[2], rect[1] + rect[3]), (0, 255, 0), 3)
# Make the rectangular region around the digit
leng = int(rect[3] * 1.6)
pt1 = int(rect[1] + rect[3] // 2 - leng // 2)
pt2 = int(rect[0] + rect[2] // 2 - leng // 2)
roi = im_th[pt1:pt1+leng, pt2:pt2+leng]
И затем берется HOG каждого ROI, и используется дляпредсказать цифру.
Проблема в том, что я не понимаю бит, который получает доступ к ROI.Почему pt1
и pt2
определены так?Почему leng
необходим?Почему я не могу просто сделать
roi = im_th[rect[1]:rect[3],rect[0]:rect[2]]
Чтобы получить рентабельность инвестиций?
Поскольку я новичок в этом, я действительно ценю простое объяснение.Спасибо!