解决实际问题
算法程序实现综合应用
一天小明刚考完试,看见教务处在扫描答题卡,他心想怎么把答题卡中的考号信息读取出来呢,怀揣疑问,他来问信息老师,老师问小明,你见过答题卡的真实样子么?我们先来看看答题卡长什么样子
情境导入
第一幕
我刚考完你问我见没见过答题卡?
此照片,作者: 未知作者,许可证: CC BY-SA
我们用画图软件看完了答题卡的真实样子,那我们先从简单的问题入手,比如答题卡中的一个像素点怎么判断是黑色还是白色呢?
判断某像素的黑白颜色
扫描的图像可能是彩色图像(RGB图像)或者是灰度图像(只有黑白灰的图像),为了提高识别准确率,我们统一将图像转换为黑白图像
灰度值=0.299*红色颜色分量+0.587*绿色颜色分量+0.114*蓝色颜色分量
根据公式计算出像素的灰度值,如果灰度值小于132,判定为黑色,否则判定为白色
例如像素点颜色值为RGB(43,10,241)
0.299*43+0.587*10+0.114*241=46.2
可判断出颜色为黑色
请帮助小明编写出Python程序
判断像素点RGB(43,10,241)的颜色
老师让小明将程序改为自定义函数并调用,让其具有通用性
第二幕
小明完成了单个像素点的颜色判定,来询问信息老师接下来要做什么?老师告诉他,在前面我们已经解决了答题卡信息中某个像素是否为黑色的判断,但要完整判断某个信息点是否被填涂,还需要对该信息点区域中的所有像素进行判断。
判断某信息点是否被填涂
判断某信息点是否被填涂与该信息点区域中的黑色像素数量有关,当黑色像素数量达到一定比例(如黑色像素的数量不少于该信息点区域中所有像素数量的64%),则认定该信息点被填涂。因此,判断某信息点是否被填涂,首先需要对该信息点区域中的所有像素逐一进行判断,然后统计所有黑色像素的总数。
任务一:确定信息点的坐标范围(确定枚举范围)
任务二:获取像素点(x,y)的RGB颜色参数
from PIL import Image
im=Image.open(“xx.bmp”) #打开图像文件
pix=im.load() #读取图像信息到Pix
R,G,B=pix[x,y] #获取像素点[x,y]的RGB颜色参数
任务三:判断像一个素点(x,y)是否为黑色(筛选条件)
R,G,B=pix(x,y)
if pd(R,G,B)==“黑色”:
print(“黑色”)
else:
print(“白色”)
请帮助小明编写出Python程序
第三幕(终章)
小明已经实现了判断一个信息点填涂情况的程序编写,但在答题卡的填涂判断中,往往需要对一批信息点进行检测,才能确定所填涂的准考证号
x_start=12 y_start=92 fill_width=24 fill_height=12
space_width=16 space_height=15
total_width=fill_width+space_width
total_height=fill_height+space_height
col(0-8)
row(0-9)
谢谢