整张答题卡识别原理(筛选出所有选项)

2023-11-09  本文已影响0人  大龙10

书名:计算机视觉40例从入门到深度学习:OpenCV-Python
作者:李立宗
出版社:电子工业出版社
出版时间:2022-07-01
ISBN:9787121436857


第9章 答题卡识别

9.2 整张答题卡识别原理

9.2.3 筛选出所有选项

1、筛选出所有选项

上述步骤找到了答题卡内所有轮廓,这些轮廓既包含所有选项的轮廓,又包含说明文字等(噪声)信息的轮廓。需要将各选项轮廓筛选出来,具体的筛选原则如下:

将所有轮廓依次按照上述条件进行筛选,满足上述条件的轮廓判定为选项;否则,判定为噪声(说明文字等其他信息的轮廓)。

2、【例9.7】找到答题卡内所有轮廓。

import cv2

thresh =  cv2.imread("d:\\OpenCVpic\\thresh.bmp",-1)  
cv2.imshow("thresh", thresh)

cnts, hierarchy = cv2.findContours(thresh.copy(),cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print("共找到各种轮廓",len(cnts), "个")

#===========筛选出选项的轮廓====
options =[]
for ci in cnts:
    #获取轮廓的矩形包围框
    x,y, w, h = cv2.boundingRect(ci)
    #计算纵横比
    ar = w / float(h)
    # 将满足长度、宽度大于 24 像素且纵横比介于[0.7,1.3]的轮廓加入 options 
    if w >= 24 and h>= 24 and ar >= 0.7 and ar <= 1.4:
        options.append(ci)

# 需要注意的是,此时得到了很多选项的轮廓,但是它们在 options 中是无规则存放的
print("共找到选项",len(options), "个")

# =====将找到的所有选项轮廓绘制出来==
color = (0,0,255) # 红色
# 为了显示彩色图像,将原始图像转换至色彩空间
threshColor=cv2.cvtColor(thresh,cv2.COLOR_GRAY2BGR)
cv2.drawContours(threshColor, options,-1, color, 5)

cv2.imshow("result",threshColor)

cv2.waitKey()
cv2.destroyAllWindows()

运行结果 数据输出
上一篇 下一篇

猜你喜欢

热点阅读