クリーンアップの画像を、画像を2値化され、国境をポイントに、ラインを妨害します
PILのインポートイメージ から pytesseract インポート * からのfnmatch インポートのfnmatch からキューインポートキュー インポートPLTのようmatplotlib.pyplot インポートCV2の インポート時間 インポートOSの デフclear_border(IMG、img_name): '' ' 边框去除 ''' W、Hを IMG =。形状[2 ] 用の Y で(W 0)範囲: のためのx における範囲(0、H): #Y Y == 0またはIF == Y == W W -1 - 2: IF Y <4。又は Y> -4 W : IMG [X、Y] = 255 #X又はX == H == 0 IF 。 -またはX == 1つのH - 2: IF X <4。または H - 4 X> : IMG [X、Y] = 255 戻りIMG DEF interference_line(IMG、img_name): '' ' 干渉雑音ライン' '' H 、W = img.shape [:2 ] #!!!OpenCVのマトリクスポイントが反転する。#IMG [1,2] 1:画像の高さ、2:画像の幅のために R&LT に範囲(0,2 ) 用の Y に 範囲(1、W - 1 ) のために、X における範囲(1、H - 1 ): カウント = 0 場合 IMG [x、y - 1]> 245 : カウント =カウント+ 1 なら IMG [x、y + 1] > 245 : カウント + 1カウント= 場合のIMG [X - 1、y]は> 245 : カウント + 1カウント= 場合 IMGの[X + 1、Y]> 245 : カウント + 1カウント= あればカウント> 2 : IMG [X 、y]は 255 = リターンIMGを DEFの interference_point(IMG、img_name、X = 0、Y = 0): "" " ドットノイズ 中央卍ブロック、ブラックドットの数として現在の点9隣接ブロック :PARAMのX: :PARAMのY: :リターン: "" " #1 TODO長い幅が下限画像決定 cur_pixel IMG = [X、Y] #の現在の画素値 の高さ、幅= img.shapeの[2 ] のために Y における範囲(0、幅- 1。 ): 用 X における範囲(0、高さ- 1 ): IF:Y == 0 #最初の行 IF X == 0: #の左上隅は、4つの隣接 #三点の中心点の横 和=INT(cur_pixel)\ + INT(IMG [x、y + 1 ])\ + INT(IMG [X + 1 、Y])\ + INT(IMGの[X + 1、Y + 1 ]) であれば和<= 2 * 245 : IMG [x、y] = 0 ELIFの X ==高さ- 1: #右上顶点 和= INT(cur_pixel)\ + INT(IMG [x、y + 1 ])\ + INT(IMGの[X - 1 、Y])\ + INT(IMG [X - 1、Y + 1 ]) であれば和<= 2 * 245: IMG [X、Y]は = 0 他: #最上位の非頂点、6つの近傍 SUM = INT(IMG [X - 1 、Y])\ + INT(IMG [。。X - 1、Y + 1 ])\ + INT( cur_pixel)\ + INT(IMG [X、Y + 1 ])\ + INT(IMG [Xの+ 1 、Y])\ + INT(IMG [Xの+ 1、Y + 1 ]) IF SUM <= 3×245 : IMG [X、Y] = 0 ELIFの Y ==幅- 1: #ボトムライン IF X == 0: #左下頂点 #の次の3つの点の中心点 SUM = INT(cur_pixel)\ + INT(IMG [+ 1 X 、Y])\ + INT(IMGの[1 X +、Y - 1 ])\ + INT(IMG [ X、Y - 1。]) IF SUM <= 245 * 2 : IMG [X、Y] = 0 ELIFの X ==高さ- 1: #右下頂点 SUM = INT(cur_pixel)\ + INT(IMG [X、Y - 1 ])\ + INT(IMG [X - 1 、Y])\ + INT(IMG [X - 1、Y - 1]) であれば和<= 2 * 245 : IMG [x、y] = 0 さもなければ: #最下非顶点、6邻域 和= INT(cur_pixel)\ + INT(IMGの[X - 1 、y]の)\ + INT(IMGの[X + 1 、Y])\ + INT(IMG [x、y - 1 ])\ + INT(IMGの[X - 1、Y - 1 ])\ + INT(IMG [X + 1、Y - 1 ]) であれば和<= 3 * 245 : IMG [x、y] = 0 さもなければ: #yが境界ない IF:Xは== 0 位頂点以外左 SUM = INT(IMG [X、Y - 1 ])\ + INT(cur_pixel)\ + INT(IMG [X、Y軸+ 1。\]) + INT(IMG - [X + 1、Y 1。。)\] + INT(IMG [X + 1 、Y])\ + INT(IMG [X + 1、Y + 1。]) IF SUM <= 3 * 245。 : IMG [X、 Y] = 0 ELIFの X ==高さ- 1: #非頂点右に (IMG [X、Y - 1 SUM = INT ])\ +INT(cur_pixel)\ + INT(IMG [x、y + 1 ])\ + INT(IMGの[X - 1、Y - 1 ])\ + INT(IMG [X - 1 、y]の)\ + INT(IMG [X - 1、Y + 1 ]) であれば和<= 3 * 245 : IMG [x、y] = 0 さもなければ: #具备9领域条件的 和= INT(IMGの[X - 1、Y - 1 ])\ + INT(IMG [X - 1 、y]の)\ + INT(IMGの[X - 1、Y + 1 ])\ + INT(IMG [x、y - 1 ])\ +INT(cur_pixel)\ + INT(IMG [x、y + 1 ])\ + INT(IMGの[X + 1、Y - 1 ])\ + INT(IMG [X + 1 、Y])\ + INT(IMG [X + 1、Y + 1 ]) であれば和<= 4 * 245 : IMG [x、y] = 0 戻りIMGの デフ_get_dynamic_binary_image(FILEDIR、img_name): '' ' 自适应阀值二值化 ''' のファイル名 = ' ./easy_code/ ' + img_name.split(' ')[0] + ' -binary。JPG' img_name = FILEDIR + ' / ' + img_name IM = cv2.imread(img_name) IM = cv2.cvtColor(IM、cv2.COLOR_BGR2GRAY) TH1 = cv2.adaptiveThreshold(IM、255、cv2.ADAPTIVE_THRESH_GAUSSIAN_C、cv2.THRESH_BINARY、21、 1 ) を返すTh1は デフ)(認識:
FILEDIR = ' ./images ' #验证码路径 ためのファイルでos.listdir(FILEDIR): もしのfnmatch(ファイル、' * .JPG ' ): img_name =ファイル #適応2値化閾値 IM = _get_dynamic_binary_image(FILEDIR、img_name) #の削除境界 IM = clear_border(IM、img_name) #ラインノイズ干渉画像の IM = interference_line(IM、img_name) #ノイズ画像点の = IMのinterference_point(IM、img_name) ファイル名 = ' ./easy_code/ ' + img_name.split(' ')[0] + ' -interferencePoint.jpg パス保存する' #easy_code cv2.imwrite(ファイル名、IM)を#セーブ写真は (認識)
ビッグブラザー用ボス淀魚粗い識別コードと詳細な説明があることを「Pythonの識別コード」から、上記コードの変更。
添付リンクします。https://www.cnblogs.com/qqandfqr/p/7866650.html