iOS-opencv识别答题卡

标签:新手 - 参考别人的项目做了略微的修改,大神轻喷。

参考文献:http://www.cuipengfei.cn/2018/04/opencv-answer-sheet-identify/

1.安装opencv,百度安装即可 

注意点:不知道是我自己的问题还是为什么,导入库的时候一定要安装官方提供的顺序倒入,不然会报错,大神如果知道原因望告知我。

2.因为opencv是 c++语言 所以在oc中需要将.m 改为.mm就不报错了

3.因为c++没有uiimage属性 所以需要将 uiimage 转化成 c++的image 也就是 cv::mat

转换方法:

- (cv::Mat)cvMatImage {

    CGColorSpaceRef colorSpace = CGImageGetColorSpace(self.CGImage);

    CGFloat cols = self.size.width;

    CGFloat rows = self.size.height;


    cv::Mat cvMat(rows, cols, CV_8UC4); // 8 bits per component, 4 channels (color channels + alpha)


    CGContextRefcontextRef =CGBitmapContextCreate(cvMat.data,                // Pointer to  data

                                                    cols,                      // Width of bitmap

                                                    rows,                      // Height of bitmap

                                                    8,                          // Bits per component

                                                    cvMat.step[0],              // Bytes per row

                                                    colorSpace,                // Colorspace

                                                    kCGImageAlphaNoneSkipLast|

                                                    kCGBitmapByteOrderDefault);// Bitmap info flags


    CGContextDrawImage(contextRef,CGRectMake(0,0, cols, rows),self.CGImage);

    CGContextRelease(contextRef);


    returncvMat;

}

4.获取到用户的拍照图片转化成cv::mat 之后第一步  灰度处理

代码 cv::cvtColor(inputMat, tmp,CV_BGR2GRAY);

inputMat ->原图像        tmp->灰度处理后的图像     CV_BGR2GRAY ->将rgb转化gray


灰度处理后的图像

5. 去噪声和二值化

    5.1去噪声  cv::blur(outputMat, tmp,cv::Size(3,3)); 

outputMat ->原图像  tmp -> 输出的图像   cv::Size 必须是单数 并且数字越大模糊的与厉害


size(3,3)


size(9,9)


size(25,25)

5.2 二值化 非常重要的一步

代码:cv::adaptiveThreshold(outputMat, tmp, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, 225, 40);

cv::adaptiveThreshold ->自适应阈值化方法

outputMat ->输入图片   tmp ->输出图片  255->最大色差阈值

CV_ADAPTIVE_THRESH_MEAN_C ->见详解  https://blog.csdn.net/superdont/article/details/6661994

CV_THRESH_BINARY_INV ->黑转白 白转黑 


二值化

6.识别边缘,由于代码太长 不复制了 

思想就是 找图片上的直线 

7. 图片纠正

根据 第6步找到的直线,利用直线的交点 找到我们需要的涂填答题卡的区域 将这个区域转化成不是倾斜的图片

核心代码:    

cv::Mat transform =cv::getPerspectiveTransform(src_vertices,dst_vertices); cv::warpPerspective(inputMat, tmp, transform,cv::Size(kuan, gao));

src_vertices ->原始图片有效区域的四个顶点坐标集合 

dst_vertices ->纠正之后的图片四个定点坐标集合

inputMat -> 输入图像

tmp ->输出图像 

cv::Size(kuan, gao) 输出图像的width height


纠正之后的图片

8.切割识别区域

这一步呢 根据每张答题卡不同的行与行 列于列的间距进行处理

就不上代码了,看图


切割有效区域

9.判断有效区域是否属于被涂抹

我判断的依据: 每一题四个选项的阈值 最高比最低多10 这一题算用户涂抹了

然后在判断这四个选项中阈值最大的一个 算用户涂抹的答案


打印的阈值

以上就是我的拙见。


地址: https://github.com/Godwuqiang/shibiedatika.git

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 第一顿蛋白粉30g+膳食纤维5g 7:50 第二顿蔬菜 200g 9:00 第三顿黑豆20g+黑麦饼10g+开...
    爱上奔跑的自由阅读 212评论 0 0
  • 2018年2月27日 星期二 晴 转眼间又到了月底,班上有一些忙碌。上午,鑫瑶给我打电话,关切地问:妈妈,你上班忙...
    书简liu阅读 121评论 0 1
  • 不到一个月,已经坚持不下去在这里写了 看了其他被压箱底的书,觉得确实很不吸引人,苍白的文字,他人看了比白开水还无味...
    张漂亮的故事阅读 211评论 3 0
  • 最近见证了一件让我很心动又揪心的事,从一个男孩初见一个女孩到他完全喜欢上她的一个爱情故事。 我心动是因为这其实算一...
    二四伍酱阅读 260评论 0 0
  • 上周,59班的值月生刘志新战友做了一次冷分享,讲述了自己在007线下私享会绍兴站的一些见闻和感受。 这次冷分享提到...
    stepbystep2016阅读 684评论 0 1