时间:2015-07-20 来源:

OpenCV数字验证码识别 【编程语言】

本文针对OpenCv入门人士div+css+js切图,因为我也不是专门做图像的,div+css+js切图只是为了完成一次模式识别的小作业.

主要完成的功能就是自动识别图片中的数字页面div重构,图片包括正常图片,页面div重构有划痕图像和有噪点图像.分别如下

bool match(Mat src){ int srcW,templatW, curtemplatW,resultH,result; srcW = src.cols; srcH = src.rows; double currentMin = 1; int currentIndex=0; double minValue, maxLoc,matchLoc; /* ** 相似度计算方法 ** 0:CV_TM_SQDIFF 平方差匹配法,承接网页制作最好的匹配值为0;匹配越差web外包, resultH), 1); matchTemplate(src, result, &minValue, &minLoc,Mat() ); //如果比当前最小还小网页切图制作,则储存该值,网页切图制作下标和坐标 if (minValue<currentMin){ currentMin = minValue; currentIndex=i; matchLoc.x=minLoc.x+window_x; matchLoc.y=minLoc.y+window_y; curtemplatW = templatW; curtemplatH = templatH; } } //cout<<"Min:"<<currentMin<<endl; //最小值比设定阈值小div+css+js切图,"<<matchLoc.y<<")"<<endl; cout<<"右上角坐标:("<<matchLoc.x+templatW<<","<<matchLoc.y+templatH<<")"<<endl;*/ countnumbers++; rectangle(srcResult, cvPoint(matchLoc.x + curtemplatW, cvScalar(0,255)); /*namedWindow("tmpresult"); imshow("tmpresult",srcResult); waitKey(0);*/ window_x =matchLoc.x+curtemplatW-1; return true; } //比阈值大则判定为非字符,div+css+js切图扫描窗右移一个单位 window_x++; return false; } 窗口扫描承接网站前端,虚函数需要被实现

先上图,承接网站前端看识别效果!

接下来开始来点干货了: opencv的安装与配置:这个要是展开讲可以再写一篇博文了psd切图html,我当时什么都不会配个opencv麻烦死了,承接网页制作最后参考网上studio2012的配置方法成功了web外包,在此略过.看到这里你的opencv还不能用的话,web外包赶紧别往下看了网页切图制作,先把opencv配好再来吧! opencv基本图片操作: 因为opencv有2.0 和 3.0 的版本区别,网页切图制作所以网上搜到的函数或类型都是两种格式div+css+js切图,建议用新版的,网页重构报价什么impImage* 类型的都是2.0版本的写法承接网站前端,我全部使用的是Mat.一定要统一好,承接网站前端不要一会新的一会旧的psd切图html,显示imshow,等待waitKey等等,div切图排版这些要先熟悉 opencv的强大之处在于几乎所有的图像操作它都有现成的函数可供调用网页切图制作,非常方便.多谷歌,网页切图制作一定会有函数已经实现了你想完成的功能. 二值化:不论是原图还是有划痕或噪点的图div+css+js切图,背景都不干净,div+css+js切图这对识别的影响还是挺不好的承接网站前端,所以要先二值化,页面div重构把黑白像素点区分的开一些.但是图片右侧明显要比左侧更暗psd切图html,所以在阈值选取的时候比较难办,手机div+css很难用一个固定的值将两部分图像都二值化得很理想web外包,tips:二值化前先直方图均衡一下效果会更好. 中值滤波:针对有噪点和有划痕的图像网页切图制作,中值滤波是非常好的处理方案,div页面中值的参数可调div+css+js切图,可以很好的消除噪音的影响.缺点就是参数不好调啊,div+css+js切图调的想死.. 模板匹配:模板的来源可以是自己从待识别的图片中抠图承接网站前端,不过我们作业提供了模板图片,承接网站前端所以这一步就可以省掉了.opencv提供了非常强大的matchTemplate函数psd切图html,可以将给定图片与模板按照你规定的计算方法计算一个相似度的值,承接网页制作并将对应的坐标存储下来web外包,你需要做的只是将值比较大(或小,web外包与你规定计算相似度的函数有关)的图像框出来即可 窗口扫描:为了提高识别率网页切图制作,我设定了一个窗口对原图进行扫描,网页切图制作扫描窗口的移动设定了一点规则div+css+js切图,就是如果前一个窗口没有匹配到数字就微调窗口位置,网页重构报价如果匹配到数字就将窗口左轴移动到匹配到的数字的右侧承接网站前端,再重复扫描. 基本干货就这么多了,承接网站前端剩下的就是不断的调参数和扫描窗口的位置了psd切图html,这个方法的缺陷就是针对不同的图片,手机div+css参数和扫描窗都要变web外包,比如来一张一行或三行的数字,div切图排版那就必须修改扫描窗口的函数了网页切图制作,还有每一步的步长之类的,网页切图制作还是相当蛋疼的!

void preProcess(){ //自适应二值化&中值滤波 Mat out; //自适应二值化 adaptiveThreshold(source, 255, CV_THRESH_BINARY, adaptiveBiParam); //中值滤波 namedWindow("binary"); imshow("binary", out,out); waitKey(0); source = out; srcResult = out; //用来显示 } 匹配

下面是部分核心代码 预处理div+css+js切图,window_y); match(tmp); if (last) break; } window_x = 30; scanWindowH = 35; window_y=sourceH - scanWindowH; while (window_x<=sourceW - scanWindowW-10){ Mat tmp = scanWindow(window_x,window_y); match(tmp); } } 针对不同图片建立了不同的类来实现:

//识别有噪点的图像 class noisyPic:public Picture{ public: noisyPic(){ Picture(); threshold = 0.5; path="test\\noisy.bmp"; adaptiveBiSize = 17; adaptiveBiParam= 19; medianBlurSize = 5; scanWindowW = 38; scanWindowH = 38; } void displayResult(){ cout<<"当前识别的是有噪点的图像,承接网站前端识别结果为:"<<endl; for (unsigned int i=0;i<numresult.size();i++){cout<<numresult[i]<<" ";} cout<<endl; cout<<"====================================================="<<endl; namedWindow("final"); imshow("final", srcResult); waitKey(0); } }; //有划痕的图像 class dirtyPic:public Picture{ public: dirtyPic(){ Picture(); threshold = 0.48; path="test\\dirty.bmp"; adaptiveBiSize = 21; adaptiveBiParam= 23; medianBlurSize = 7; scanWindowW = 36; scanWindowH = 38; } virtual void displayResult(){ cout<<"当前识别的是有划痕的图像,承接网页制作识别结果为:"<<endl; for (unsigned int i=0;i<numresult.size();i++){cout<<numresult[i]<<" ";} cout<<endl; cout<<"====================================================="<<endl; namedWindow("final"); imshow("final", srcResult); waitKey(0); } }; 主函数

int main() { //正常图像,web外包构造函数不指定参数时网页切图制作,默认识别第一张图 //构造函数可以指定识别第几张图,网页切图制作下面以第三张为例 Picture pic = Picture(3); pic.startRecognize(); //识别有噪声图像 noisyPic noisyPic; noisyPic.startRecognize(); //识别有划痕图像 dirtyPic dirtyPic; dirtyPic.startRecognize(); //识别放大缩小图像 scalePic scale = scalePic(1); scale.startRecognize(); return 0; } 为了方便童鞋们参考div+css+js切图,提供了下载链接,网页重构报价不过要花一点积分的哦!(LZ下别的也是要积分的啊!) 戳我戳我 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); }); 版权声明:本文为博主原创文章承接网站前端,未经博主允许不得转载.

点击次数:7596
作者:
web前端行业资讯
Web new NewsList
谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日苹果经典电脑Lisa源代码修复完成将于2018年开源 ,,2017年12月28日腾讯浏览指数发布年终榜单2017年人们都关注哪些AI话题? ,,2017年12月28日除了发现开普勒90,NASA还靠AI做了什么? ,,2017年12月28日柯洁宣布:明年4月,将再次与围棋AI交锋 ,,2017年12月28日百度无人车美国首秀CES将发布Apollo2.0 ,,2017年12月28日这四种技术发展趋势将在2018年改变世界 ,,2017年12月28日2017:谷歌DeepMind团队的年度回顾 ,,2017年12月28日封杀这个公式,AI智商将为零 ,,2017年12月28日微软AI高管:要让所有人、所有机构都用上人工智能 ,,2017年12月28日为什么Linux桌面年一直未到来 ,,2017年12月28日AppleLisa操作系统将开源 ,,2017年12月28日2018年9大技术趋势预测 ,,2017年12月28日谷歌研究院发布NIMA:能评价图像有多美,还能让图像变得更美 ,,2017年12月28日苹果为2019年iPhone开发大容量电池新技术 ,,2017年12月28日谷歌发布Tacotron2:能更简单地训练AI学习演讲 ,,2017年12月21日TensorFlow漏洞爆发背后:关于AI安全我们的傻与天真 ,,2017年12月21日Android端Edge浏览器新版发布:常规性能优化和BUG修复 ,,2017年12月21日三星开发出全球最小的DRAM芯片技术领先优势扩大 ,,2017年12月21日腾讯绝艺AI下一步将学习AlphaGozero自对弈训练 ,,2017年12月21日Facebook社交VR应用Spaces扩大覆盖面:入驻HTCVive ,,2017年12月21日设计图曝光:三星双屏折叠手机原来是这样的 ,,2017年12月21日微信支付和支付宝已成为世界移动支付的"老师" ,,2017年12月21日新专利表明FaceID未来有望装备在iPad、MacBook和iMac等设备 ,,2017年12月21日首批九个建议加入EE4J的项目 ,,2017年12月21日这就是SurfacePhone?微软可折叠手机概念图曝光 ,,2017年12月21日华容道04---RoleSprite的设计 【综合】2015年04月17日NYOJ1186心理阴影(两个圆环的相交面积)【移动开发】2015年04月07日perl的logwrapper使用实例代码2014年01月29日删除链表中所有值为k的节点 【Web前端】2015年07月28日IOS上如何画出1像素的线【Web前端】2015年07月02日【笔记】JavaScript编码规范-jQuery 【编程语言】2015年05月27日【LeetCode】【Java】UniqueBinarySearchTreesII 【编程语言】2015年07月21日计数排序 【编程语言】2015年04月13日实现signal和slot机制(2)-跨线程投递 【编程语言】2015年06月05日一个网站优秀的登录验证设计方案(登录页面的超时以及密码加上时间戳) 【综合】2015年05月05日codeforces316D 【架构设计】2015年08月24日ValidSudoku 【移动开发】2015年07月16日产品研发管理(一):产品版本命名规则 【系统运维】2015年06月11日数据结构:树与二叉树 【系统运维】2014年11月04日伴着代码,那个女孩儿慢慢长大2015年09月01日jquery滚动条事件简单实例2014年01月29日Vim使用技巧4 【系统运维】2015年06月30日第一次使用markdown,谈谈我的看法 【综合】2015年05月05日如何网上赚钱--关键是把握正确方法2014年01月29日在java中如何创建一个内存泄露【编程语言】2015年04月24日【C++】LeetCode:99LongestPalindromicSubstring(最长回文子串) 【编程语言】2015年01月19日LeetCode_PartitionList 【编程语言】2015年04月17日C++基数排序(清楚明了完美详细的实现) 【编程语言】2015年06月17日修复IE9&safari的sort方法2014年01月29日【机房重构】——查看上机记录、充值记录+三层+存储过程+模板方法【移动开发】2015年05月05日HDU4994RevengeofNim(简单博弈)【编程语言】2015年03月19日Android之实现滑动开关组件 【数据库】2014年12月16日新型编译器助JavaScript搞定类型难题 ,,2016年07月24日MATLAB图像处理_统计最大最小平均灰度 【移动开发】2015年01月04日纯CSS3美化radio和checkbox 【Web前端】2015年07月21日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)