一、问题提出

由于GPY进行了纠偏,所以在采集的时候,就已经获得了质量较高的答题卡图片

下一步就是需要从这张图片中,识别出人眼识别出来的那些信息,并且将这个过程尽可能地鲁棒化,提高识别的准确率。
二、思路探索
    在从图片到数字的转变过程中,既是一个“量化”的过程,也是一个“降维”的过程,需要特定的角度非常重要。这就像很多人站在一起拍集体照,选择不同的角度能够得到这群人不同的像,高明的摄像师能够很快地找到角度,将所有的人都拍摄其中;我们图像处理程序也是同样的道理,有经验的工程师能够善于模式思考,快速找到解决方法的途径。
    对于我们这里的这张答题卡图片,和之前的较为简单的答题卡想比较,有很多不同,比较两者的二值图片,就可以发现:
  V  S
最大的不同在于没有可以供标定的基础点。因此我们必须采用其它的方法来进行定位。
此外,答题区域为矩形密集分布,因此我想到的是直接“网格化”进行处理。
三、算法过程和主要代码
step1:灰度-二值-形态学
step2:轮廓分析
对识别出来的二值图像通过轮廓进一步地进行处理,得到下图的识别结果,就为下一步定量打下基础
step3:模板匹配
想得到识别的结果,首先就是需要对现有的图片进行分割出来。在没有定位点的前提下,如何准确切割?
根据以前的经验,基本的思路是这样:
a、根据模板识别,准确的获得可定位地址(比如我选择使用“选择题答题卡”几个字作为模板,得到下图定位结果,注意图中白点);
b、而后采用经典的“纵横”方法进行识别。(这里我对各个距离进行了测量和标注)
 
细节:
编写以下代码:
得到以下结果:
step4:分块面积识别
直接识别划分区域的面积,得到定量结果
全图:
细节:
step5:转化得到识别结果
编写相关识别的结果为:
 
四、需要注意的地方:
1、模板识别对于不同尺度采集的图片,是否具有通用性。故我需要在不同的图片、不同的采集模式下进行探索;
2、目前识别出来的结果缺乏对答题结果“重复”“遗漏”情况分析;
3、我们看见的是彩色或者灰度图像,实际上,需要识别出来的是bin区域。在实验的过程中,我们会用到“彩色或者灰度”作为背景。
 
至此,复杂答题卡的算法部分基本完成。感谢阅读至此,希望有所帮助。

【4opencv】识别复杂的答题卡1(主要算法)的更多相关文章

  1. 识别简单的答题卡(Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV——jsxyhelu重新整编)

    该博客转自www.pyimagesearch.com,进行了相关修改补充. Over the past few months I've gotten quite the number of reque ...

  2. 浅谈PHP答题卡识别(一)

    最近期末考试考完了,我们也要放寒假了.于是突发奇想,想用PHP写一个答题卡识别程序.已经实现了一些,现分享给大家. 具体的步骤如下: 上传答题卡=>图片二值化(已实现)=>寻找定位点(已实 ...

  3. 机器学习进阶-案例实战-答题卡识别判 1.cv2.getPerspectiveTransform(获得投射变化后的H矩阵) 2.cv2.warpPerspective(H获得变化后的图像) 3.cv2.approxPolyDP(近似轮廓) 4.cv2.threshold(二值变化) 7.cv2.countNonezeros(非零像素点个数)6.cv2.bitwise_and(与判断)

    1.H = cv2.getPerspectiveTransform(rect, transform_axes) 获得投射变化后的H矩阵 参数说明:rect表示原始的位置左上,右上,右下,左下, tra ...

  4. opencv 识别答题卡

    参考这个网站,然后自己 找了张图片试了一下 http://blog.csdn.net/cp562090732/article/details/47804003 // test.cpp : 定义控制台应 ...

  5. jquery css3问卷答题卡翻页动画效果

    这个选项调查的特效以选项卡的形式,每答完一道题目自动切换到下一条,颇具特色.使用jQuery和CSS3,适合HTML5浏览器. 效果展示 http://hovertree.com/texiao/jqu ...

  6. 答题卡作文模块的一种方法-VSTO

    在开始做之前,首先百度了Word有没有简单的生成方法,果然有--页面布局->稿纸设置->方格式稿纸 效果如下图所示.很规范,但是不是答题卡所需要的,因为这样会把所有页面都设置为这样的稿纸. ...

  7. Android实现选择题答题(包括单选、多选和答题卡)

    在线答题demo,具体代码是一年多前完成的,比较简单,不再贴出,请参见Github. 主要功能: 单选:点击选项直接进入下一题.多选:选择多个选项,向右滑动进入下一题.答题卡:点击题号重新进入答题界面 ...

  8. unity 卡牌聚拢算法

    unity 卡牌聚拢算法 前言 代码 前言 笔者在做项目时遇到了一个要聚拢手牌,像三国杀里的手牌聚拢的效果 大概效果图: 代码 public Dictionary<int, int> le ...

  9. LeadTools答题卡识别方案

    /// <summary> /// 批改操作 /// </summary> public AnswerCard DoCorrect(Stream AnserCardFile) ...

随机推荐

  1. Selenium基础知识(十)截屏

    自动化测试过程中,经常会用截图的方式,更直观的显示展示错误信息:selenium截图的三种方式: driver.get_screenshot_as_file(r'd:\selenium.png') # ...

  2. 根据异常自定义处理逻辑(【附】java异常处理规范)

    ▄︻┻┳═一『异常捕获系列』Agenda: ▄︻┻┳═一有关于异常捕获点滴,plus我也揭揭java的短 ▄︻┻┳═一根据异常自定义处理逻辑([附]java异常处理规范) ▄︻┻┳═一利用自定义异常来 ...

  3. asp.net拦截器

    一 拦截器又称过滤器. asp.net mvc本身是自带3种拦截器:Action拦截器.Result拦截器.Exception拦截器. 应用中常见的拦截器有日志拦截器(Action拦截器)和异常处理拦 ...

  4. Js闭包学习笔记

    好多内容摘抄了大神的博客内容,只为分享记录.如有冒犯,请见谅 参考文章 http://www.cnblogs.com/libin-1/p/5962269.html http://www.cnblogs ...

  5. 福布斯最佳雇主榜:谷歌母公司Alphabet再登榜首 微软次之

    http://www.sohu.com/a/259018538_114774 站长之家(ChinaZ.com) 10月12日 消息:在福布斯发布的最新全球最佳雇主榜单中,谷歌母公司Alphabet以满 ...

  6. 手动创建mfc工程(留存方便复制)

    案例一. #include <afxwin.h> class CMyWnd : public CWnd { //DECLARE_DYNCREATE(CMyWnd) public: CMyW ...

  7. hdu4787 AC自动机加分块

    这题说的是 有n次操作 +w 表示读入一个字符串,?p 询问这个字符串的子串在那些模板串中有多少个, http://blog.csdn.net/qq574857122/article/details/ ...

  8. sitecore系列教程之Sitecore个性化定制体验的内容策略

    这是利用Sitecore个性化引擎实现数字化转型的三部分系列文章的第一部分. 想象一下这种情况:您是一家B2C公司,拥有源源不断的客户群,支持您的直接面向消费者的产品.您最近推出了一项新服务,旨在为不 ...

  9. Java多线程-----线程池详解

    1. 线程池的实现原理 提交一个任务到线程池中,线程池的处理流程如下: 判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务.如果 ...

  10. 最小二乘法的Java实现

    最小二乘法原理十分简单,这里不再赘述.对于预测公式y' = a * x + b,最优解如下 double a = Sxy / Sxx; double b = yAvg - a * xAvg; doub ...