最后找出答题卡上填涂的圆圈时,可以正确地圈出被填涂的圆圈,但是部分圆圈对应的序号是错的。比如,某道题被填涂的圆圈是第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步长