aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 12700|回复: 5

自创的验证码背景去干扰算法

[复制链接]

2

主题

3

回帖

107

积分

一级会员

积分
107
发表于 2014-1-22 22:16:04 | 显示全部楼层 |阅读模式
原理:如果一个像素点周围有3个连贯的像素点,就认为是需要识别的像素,否则当背景处理。只适用于特定环境。

  1. scanImageA = function(img){
  2.         // 保存原始高宽
  3.         var w = img.getWidth();
  4.         var h = img.getHeight();
  5.         // 二值化
  6.         img.bpp(1);
  7.         img.bpp(24);
  8.                
  9.         // 要删除的点
  10.         var dels = {};       
  11.        
  12.         //首先计算出各点的颜色值,避免在循环递归中重复的取
  13.     var tcl={};
  14.     for(i=0;w;1){
  15.         tcl[ i ]={};
  16.         for(j=0;h;1){
  17.             tcl[i][j]=img.getPixel(i,j);
  18.         }
  19.     }
  20.    
  21.         // 去周边颜色值个数小于3的
  22.         for(i=1;w-1;1){
  23.                 for(j=1;h-1;1){
  24.                         // 周围黑点个数
  25.                         var size = 0;
  26.                         // 连贯标记
  27.                         var lines = 0;
  28.                         if(tcl[i][j]==0) {
  29.                                 if(tcl[i-1][j-1]==0) {
  30.                                         size ++;
  31.                                         lines += 1;
  32.                                 }
  33.                                 if(tcl[i-1][j]==0) {
  34.                                         size ++;
  35.                                         lines += 2;
  36.                                 }
  37.                                 if(tcl[i-1][j+1]==0) {
  38.                                         size ++;
  39.                                         lines += 4;
  40.                                 }
  41.                                 if(tcl[i][j-1]==0) {
  42.                                         size ++;
  43.                                         lines += 128;
  44.                                 }
  45.                                 if(tcl[i][j+1]==0) {
  46.                                         size ++;
  47.                                         lines += 8;
  48.                                 }
  49.                                 if(tcl[i+1][j-1]==0) {
  50.                                         size ++;
  51.                                         lines += 64;
  52.                                 }
  53.                                 if(tcl[i+1][j]==0) {
  54.                                         size ++;
  55.                                         lines += 32;
  56.                                 }
  57.                                 if(tcl[i+1][j+1]==0) {
  58.                                         size ++;
  59.                                         lines += 16;
  60.                                 }
  61.                 };
  62.                 // 背包算法特性取连贯点 lines = 7 or lines = 14 or lines = 28 or lines = 56 or lines = 112 or lines=224 or lines = 193 or lines = 131
  63.                 if(size<=3 and lines != 7 and lines != 14 and lines != 28 and lines != 56 and lines != 112 and lines != 224 and lines != 193 and lines != 131){
  64.                         // 记录要删除的点
  65.                         table.insert(dels,{i;j});
  66.                 }
  67.                 }       
  68.         }
  69.         for(i=1;#dels;1){
  70.                 // 设置成白色
  71.                 img.setPixel(dels[i][1],dels[i][2],16777215);       
  72.         }
  73. }

  74. import inet.http;
  75. import soImage;

  76. var img = soImage();
  77. img.setBytes(inet.http().get("https://123.125.98.209/image?mode=validate&width=60&height=20") ,"*.jpg");
  78. var w,h = img.getWidth(),img.getHeight();

  79. scanImageA(img);
  80. // 去白边
  81. img.crop(1,1,w-1,h-1);

  82. img.paint(); //在屏幕上显示处理后的图像

复制代码

评分

参与人数 4 +25 收起 理由
cnruby + 5 很给力!
2535163639 + 5 赞一个!
fcsx + 5 很给力!
ordinary + 10 很给力!

查看全部评分

0

主题

6

回帖

98

积分

一级会员

积分
98
发表于 2014-8-29 19:28:23 | 显示全部楼层
前排留座

3

主题

27

回帖

250

积分

二级会员

积分
250
发表于 2015-1-16 17:19:43 | 显示全部楼层
这个方法不错。

0

主题

3

回帖

26

积分

新手入门

积分
26
发表于 2015-1-21 01:20:21 | 显示全部楼层
学习!!!

0

主题

1

回帖

8

积分

新手入门

积分
8
发表于 2015-2-13 10:43:19 | 显示全部楼层
方法非常好,已经保存了,少价改动,可以解决很多问题

10

主题

31

回帖

224

积分

二级会员

积分
224
发表于 2015-10-10 12:04:40 | 显示全部楼层
很赞, 那个参数:3 可否改成参数化,可改的~ 通用性将大大增加~~
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-2-13 08:00 , Processed in 0.070628 second(s), 32 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表