from PIL import Image
im = Image.open('答题卡.jpg')
pix = im.load()
#==================================================================================
#功能:判断一个像素的RGB颜色是否被填涂,若被填涂返回True,否则返回False
#参数:r, g, b为一个像素的RGB颜色值
def judge_pix(r, g, b):
gray = 0.299 * r + 0.587 * g + 0.114 * b
return gray < 132
#功能:判断一个信息点是否被前途,若被填涂返回True,否则返回False
#参数:x, y为该信息点左上角像素的位置信息
def judge_rec(x, y):
w = 35 #设置信息点的宽度
h = 13 #设置信息点的高度
cnt = 0 #存储被填涂信息点的个数
#补充实现后续代码
#1. 遍历信息点的每一个像素。判断每个像素是否被填涂,如果被填涂则cnt加1
#2. 如果被填涂的像素个数超过总像素的64%,则表示信息点被填涂,返回True, 否则返回False
for y1 in range(h):
for x1 in range(w):
r,g,b = pix[x+x1,y+y1]
if judge_pix(r,g,b):
cnt+=1
return cnt>=160
#功能:传入一列第一个信息点左上角像素位置信息,返回该列填涂的数值
#参数:x, y为该列第一个信息点左上角像素位置信息
def judge_col(x, y):
y_span = 31 #两个纵向相邻信息点的间距
kh = -1 #存储填涂的考号,若该列没有填涂则返回-1
#补充实现后续代码
for i in range(10):
if judge_rec(x,y):
kh=i
break
y+=y_span
return kh
#====================================================================================
#设置第一列第一个信息点左上角位置信息
x0 = 10
y0 = 245
x_span = 51 #两个横向相邻信息点的间距
#补充实现后续代码
for i in range(5):
print(judge_col(x0,y0),end='')
x0+=x_span