用python进行答题卡检测的过程中遇到的问题

  最后找出答题卡上填涂的圆圈时,可以正确地圈出被填涂的圆圈,但是部分圆圈对应的序号是错的。比如,某道题被填涂的圆圈是第5个,但是对应的序号是3.

相关代码:

answer_circle = sort_contours(answer_circle, method="top-to-bottom")[0]
    right = 0
    p = 0
    data = []
    for i in np.arange(0, len(answer_circle), 5):     # 分成五行
        cnts = sort_contours(answer_circle[i: i+5], method="left-to-right")[0]
        choose = None
        k = None
        q = 0
        for j in cnts:
            mask1 = np.zeros(thresh.shape, dtype='uint8')
            mask1 = cv2.cvtColor(mask1, cv2.COLOR_BGRA2GRAY)
            mask1 = cv2.drawContours(mask1, [j], -1, 255, -1)
            # imshow('mask', mask1)
            mask2 = cv2.bitwise_and(thresh, thresh, mask=mask1)
            # imshow('mask2', mask2)
            mask2 = cv2.cvtColor(mask2, cv2.COLOR_BGRA2GRAY)
            result = cv2.countNonZero(mask2)
            if choose is None or result > choose[0]:
                choose = (result, j)
                k = j
                q += 1
        if q == right_answer[p]:
            warped = cv2.drawContours(warped, [k], -1, (0, 255, 0), 3)
            right += 1
        if q != right_answer[p]:
            warped = cv2.drawContours(warped, [k], -1, (0, 0, 255), 3)
        p = p + 1

我尝试过改变二值化的阈值,但是作用不大。
希望有人能帮忙解答

检查一下分成5行和列的时候有没有部分并没有5列,导致你的行数错误,并不是5步长