我试图了解使用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]
然后获取每个ROI的HOG,并用于预测数字。
问题在于,我无法理解访问ROI的途径。为什么pt1
和pt2
这样定义?为什么leng
是必需的?为什么我不能做
roi = im_th[rect[1]:rect[3],rect[0]:rect[2]]
要获得投资回报率?
由于我是新手,所以我非常感谢一个简单的解释。谢谢!