图片处理和验证码识别
背景
1.灰度化
将图片的RGB三通道的值变成单通道,用计算公式变成一个值,也就是单通道
2.二值化
将灰度化后的图片进一步处理,将图片所有的像素点的通道变成两种类型的值,比如设定一个阈值,灰度化之后的像素点的值小于这个阈值设为0,大于这个阈值255,一般作为特征向量设为0,1,显示就设为0,255,也可以是其他0-255之间的值,其中一个值为0
ps:一般识别轮廓不注重色彩可以进行灰度化和二值化,识别带色彩的图片不进行灰度化和二值化
3.示例代码
import tesserocr
from PIL import Imageimage = Image.open("./0.jpg")# 灰度化
image = image.convert("L")
image.show()# 默认阈值二值化
# image = image.convert("1")
# image.show()# 设定阈值二值化
threshold = 155
table = []
for i in range(256):if i < threshold:table.append(0)else:table.append(1)
image = image.point(table,'1')
image.show()
result = tesserocr.image_to_text(image)
print(result)
复制代码
示例代码2
import cv2
import os
import numpy as np
import copy
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageFilterimage = Image.open('3.jpg')
pixdata = image.load()
out = image.convert('L')
# 灰度化
threshold = 45
table = []
for i in range(256):if i < threshold:table.append(0)else:table.append(1)
out = out.point(table, '1')
out.show()# 去除边框
widths = 1
w, h = out.size
pixdata2 = out.load()
for x in range(widths):for y in range(0, h):pixdata2[x, y] = 255
for x in range(w - widths, w):for y in range(0, h):pixdata2[x, y] = 255
for x in range(0, w):for y in range(0,widths):pixdata2[x, y] = 255
for x in range(0, w):for y in range(h-widths, h):pixdata2[x, y] = 255# 去除噪声
def del_noise(img, number):# height = img.shape[0]# width = img.shape[1]height, width = img.size# print(height,width)img_new = copy.deepcopy(img)# print(img_new)for i in range(1, height - 1):for j in range(1, width - 1):point = [[], [], []]count = 0point[0].append(img.getpixel((i - 1,j - 1)))point[0].append(img.getpixel((i - 1,j)))point[0].append(img.getpixel((i - 1,j + 1)))point[1].append(img.getpixel((i,j - 1)))point[1].append(img.getpixel((i,j)))point[1].append(img.getpixel((i,j + 1)))point[2].append(img.getpixel((i + 1,j - 1)))point[2].append(img.getpixel((i + 1,j)))point[2].append(img.getpixel((i + 1,j + 1)))for k in range(3):for z in range(3):if point[k][z] == 0:count += 1print(count)if count <= number:img_new.putpixel((i, j), 255)# img_new[i, j] = 1img_new.show()return img_newout = del_noise(out, 6)
# out.show()
复制代码
4.验证码
我们一般使用的验证码有两类,一类是区分人和机器的验证码,像你在问题发的那种,一类是验证个人身份的验证码,像手机短信验证码、语音验证码等等。
我们先来说区分人和机器的验证码。就像前面那个兄弟说的,主要是为了防止暴力破解。
可能对于人来说,知道你的一个帐号,一个一个去试你的密码是件很傻的事情。但是对于计算机来说,写一个程序去做这件事情简直太轻松了。计算机最擅长去做重复的事情。但计算机又是这个世界上最严重的脸盲症患者。那么,验证码的诞生就是为了对抗程序而诞生了。这也能解释为什么验证码一个个都扭曲的不行,人有时看起来都会很难识别。这都是为了恶心计算机程序呀。
可能你已经发现现在的验证码越来越难类,连正常人都会输错好几遍。
其实这主要是验证码破解技术也上来了,现在甚至用图像识别,机器学习等技术来识别破解验证码,所谓魔高一尺道高一丈,然后苦的是我们用户啊....
再来说另一类验证码,个人身份验证码。像手机短信验证码,手机语音验证码就是此类。
这类没什么好说的,只要你用的平台是安全稳定并且快捷的,就不会出现大问题。
但这类验证码的出现,还是带来了验证码短信轰炸这种问题。
图片处理和验证码识别相关推荐
- java 识别图片 边框_atitit.验证码识别step3----去除边框---- 图像处理类库 attilax总结java版本...
atitit.验证码识别step3----去除边框----图像处理类库 attilax总结java版本 1. 去除边框思路原理 图像裁剪::从图片的Positions.CENTER,wid,hit)裁 ...
- 基于python的验证码识别
基于python的验证码识别 在利用python对一些网站进行批量操作的时候,验证码是个绕不过去的东西,虽然现在网上有很多图像识别的api,但是可能不适用于你的项目,我为了批量爬取班上同学的学分绩点写 ...
- 验证码识别---云打码
这边采用云打码平台api 接口识别验证码图片,注意验证码识别正确率不是100% ,在项目中使用需做好处理 # -*- coding: utf-8 -*- import json import time ...
- [验证码识别技术]-初级的滑动式验证图片识别
初级的滑动式验证图片识别方案 1 abstract 验证码作为一种自然人的机器人的判别工具,被广泛的用于各种防止程序做自动化的场景中.传统的字符型验证安全性已经名存实亡的情况下,各种新型的验证码如雨后 ...
- 字符识别Python实现 图片验证码识别
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- c++ 图片验证码识别_基于tensorflow 实现端到端的OCR:二代身份证号识别
最近在研究OCR识别相关的东西,最终目标是能识别身份证上的所有中文汉字+数字,不过本文先设定一个小目标,先识别定长为18的身份证号,当然本文的思路也是可以复用来识别定长的验证码识别的. 本文实现思路主 ...
- eoLinker-API_Shop_验证码识别与生成类API调用的代码示例合集:六位图片验证码生成、四位图片验证码生成、简单验证码识别等...
以下示例代码适用于 www.apishop.net 网站下的API,使用本文提及的接口调用代码示例前,您需要先申请相应的API服务. 六位图片验证码生成:包括纯数字.小写字母.大写字母.大小写混合.数 ...
- python 识别登陆验证码图片(完整代码)_python 识别登录验证码图片功能的实现代码(完整代码)...
在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...
- 【成长笔记】图片验证码识别
记得很早以前,我对如携程飞猪等第三方平台购买火车票不用输入验证码感到很--牛!百度后发现其可能是实现了自动打码,或者说机器自动识别验证码,我很好奇. 后来,当我觉得我必须要给自己找些有趣的知识来学习的 ...
- python识别图片中数字_Python图像处理之图片验证码识别
在上一篇博客Python图像处理之图片文字识别(OCR)中我们介绍了在Python中如何利用Tesseract软件来识别图片中的英文与中文,本文将具体介绍如何在Python中利用Tesseract软件 ...
最新文章
- [Shell] 文件名截取的问题:bash .vs. csh
- redis常用API
- 漫画:大厂总提SaaS化部署,到底什么是IaaS、PaaS和SaaS?
- 第9天Sqltie数据库
- Traffic Light
- 1253 Dungeon Master
- 谷歌浏览器打开显示2345浏览器界面
- 《游戏学习》 java经典纸牌类小游戏《斗地主》源码
- 繁体中文和简体中文编码
- 2022互联网暑期实习笔面结果记录
- 2020秋季《大数据与物联网》期末答案参考
- 对毕业季即将踏入职场的年轻人的一点建议
- GoF设计模式学习笔记 第一回 Mediator
- Fbx文件解析(一)——FBX SDK for Windows环境配置
- .linux开发-服务器软件(12) 姚军权的服务器资料,还不错,很多关于iocp 与epoll
- ACPI电源管理中的S0 S1 S2 S3 S4 S5
- 谈谈小红书怎么引流减肥产品?让你轻松上热门变现
- Python基础篇(六)-- 类和对象
- 电流镜电流--第10学时
- 【成立公司】5.营业执照和组织机构代码证
热门文章
- http://jingyan.baidu.com/article/636f38bb3eb78ad6b8461082.html
- cxf与struts2拦截器冲突的解决方案
- ASP.NET前端解决方案之一:Ext.Net入门随笔1
- mssql 数据库“查询处理器用尽了内部资源,无法生成查询计划。”问题的处理...
- Python 学习随笔
- (十二)random模块
- 34.Odoo产品分析 (四) – 工具板块(5) – 设备及联系人目录(1)
- 如何查看Dell服务器前面板LCD的报错资讯
- RecyclerView,ListView,GridView等UI控件使用及其优化和图片错位--
- How to convert any valid date string to a DateTime.