python3 对图片进行局部切割&验证码&图片识别&图片操作
备注:
获取PC屏幕坐标工具pmzbhqgj.zip在博客园文件中
#——————————————图片切割截图——————————————————————————————————
方式一
# 导入相关的库 from PIL import Image # 打开一张图 img = Image.open('test.jpg') # 图片尺寸 img_size = img.size h = img_size[1] # 图片高度 w = img_size[0] # 图片宽度 x = 0.25 * w y = 0.16 * h w = 0.5 * w h = 0.2 * h # ###不填参数直接复制 # region = img.crop() # ###保存图片 # region.save("test123.jpg") # 开始截取 region = img.crop((x, y, x + w, y + h))#起始坐标 # 保存图片 region.save("test.jpg")
结果如下:
方式二:
#从坐标为(x1,y1)的点到坐标为(x2,y2)的点连成一条斜线,最后以这条斜线为对角线的矩形
from PIL import Image img = Image.open(r"C:\Users\Administrator\Desktop\chen.png") print(img.size)#图片尺寸 cropped = img.crop((222, 110, 310, 180)) # (x1, y1, x2, y2) cropped.save(r"C:\Users\Administrator\Desktop\test.png")
最终结果:
方式三:
利用OpenCV对其进行裁剪
#此方法和方法二类似是基于坐标定位,只是使用函数不同
import cv2 img = cv2.imread(r"C:\Users\Administrator\Desktop\chen.png") print(img.shape) cropped = img[110:180, 222:310] # 裁剪坐标为[y1:y2, x1:x2] cv2.imwrite(r"C:\Users\Administrator\Desktop\test.png", cropped)
#____________________________________搭建验证码识别服务:_____________________________________________________
安装 pip install ddddocr库,python版本>=3.8
服务端:
用flask搭建一个简单的后台服务
#!/usr/bin/env python # encoding: utf-8 from flask import Flask, render_template, request import ddddocr app = Flask(__name__) @app.route('/ocr', methods=['POST']) def ocr_api(): ocr = ddddocr.DdddOcr() img = request.files.get('image').read() r = ocr.classification(img) return ''.join(r) if __name__ == '__main__': app.run(host="0.0.0.0", port=6500)
客户端:
#!/usr/bin/env python # encoding: utf-8 import requests api_url = "http://106.55.29.87:6500/ocr" file = open(r'C:\Users\Administrator\Desktop\3HX0217729014323.png', 'rb').read() res = requests.post(api_url, files={'image': file}) print('图片识别结果:',res.text)
#_______________________________________________图片操作___________________________________________________
##############################下载图片及读取图片####################
要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即
图片的写入地址是https://avatar.csdn.net/2/E/C/3_u010590983.jpg,我们用requests库先访问图片链接,然后用r.content接收图片内容,然后再写入。大家记得这个写法,requests库是一个很重要的库,后面写爬虫的时候经常会用到:
下载:
import requests r = requests.get('https://avatar.csdn.net/2/E/C/3_u010590983.jpg') with open('avatar.jpg','wb') as f: f.write(r.content)
读取:
图片的读取,跟文本的读取差不多,只是把读写类型改成了rb。
with open('avatar.jpg','rb') as f: f.read()
########################图片基本操作#######################
#!/usr/bin/env python # -*- coding: utf-8 -*- import colorsys from PIL import Image from PIL import ImageGrab ###____________________________________电脑截屏_________________________________________________ def Screenshot(path): img = ImageGrab.grab()# 电脑截图当前页面 width = img.size[0] # 获取宽度 height = img.size[1] # 获取高度 print('分辨率:{}*{}'.format(width,height)) #创建图片对象 img = img.resize((width,height), Image.ANTIALIAS) #保存图片 img.save(path)#path图片保存的地址 Screenshot(r'C:\Users\Administrator\Desktop\123.png') ###____________________________________电脑截屏缩放图片后保存____________________________________ img = ImageGrab.grab()# 电脑截图当前页面 width = img.size[0] # 获取宽度 height = img.size[1] # 获取高度 print('分辨率:{}*{}'.format(width,height)) #缩放到30% img = img.resize((int(width*0.3), int(height*0.3)), Image.ANTIALIAS) #保存缩放后的图片 img.save(r'C:\Users\Administrator\Desktop\1236666666666.png') #_____________________________________电脑局部截图_________________________________________________ def pcScreenShot(saveName,x1=0,y1=0,x2=1920,y2=1080):#默认结束坐标为1920*1080 '''根据坐标局部截图''' # 第一个参数 开始截图的x坐标 # 第二个参数 开始截图的y坐标 # 第三个参数 结束截图的x坐标 # 第四个参数 结束截图的y坐标 bbox = (x1, y1, x2, y2)#可指定坐标 im = ImageGrab.grab(bbox) # 参数 保存截图文件的路径 print('电脑屏幕截图保存至:{}'.format(saveName)) im.save(saveName)#保存图片 pcScreenShot(r'C:\Users\Administrator\Desktop\test.png')#需要保存图片的路径 ###____________________获取图片基础数据、等比例缩放(压缩)图片、指定尺寸_____________________________ ##打开图片 img=Image.open(r'C:\Users\Administrator\Desktop\test123.png') #img.show()#显示图片 print (img.size) #图片的尺寸 print (img.mode) #图片的模式 print (img.format) #图片的格式 width = img.size[0] # 获取宽度 height = img.size[1] # 获取高度 #缩放到30%,图片尺寸变小占用空间小 imgg = img.resize((int(width*0.3), int(height*0.3)), Image.ANTIALIAS) #保存图片(保存缩放后的图片) imgg.save(input("请输入图片的路径及格式:")) #指定尺寸450*450(imgg是缩放后的图片对象) out = imgg.resize((450,450)) out.save(r'C:\Users\Administrator\Desktop\666666.png') #________________________________图片旋转_________________________________________________________ pic = input("请输入图片的路径及格式:") im = Image.open(pic) #dst = im.transpose(Image.FLIP_LEFT_RIGHT) #左右互换 # dst = im.transpose(Image.FLIP_TOP_BOTTOM) #上下互换 # dst = im.transpose(Image.ROTATE_90) #顺时针旋转 dst = im.rotate(45) # 顺时针角度表示 dst.save(r'C:\Users\Administrator\Desktop\666666.png') #___________________________图片转成灰色并保存___________________________________________________ I = Image.open(r'C:\Users\Administrator\Desktop\test123.png') #I.show()#显示图片 L = I.convert('L')#转颜色 #L.show() L.save(r'C:\Users\Administrator\Desktop\test1234444444444444444.png')
相关连接:
https://mp.weixin.qq.com/s/aG2pnscbG3tfX_QJI8Jr2A ..........................快速部署属于自己的 OCR API
https://blog.csdn.net/u010590983/article/details/90080578 ................图片本地读接口写入
https://zhuanlan.zhihu.com/p/342405677 ............................................百度体验版-OCR
https://github.com/JaidedAI/EasyOCR ................................................python文字识别(EasyOCR安装,,EasyOCR安装及用法1,,EasyOCR安装及用法2)
https://blog.csdn.net/lcr_happy/article/details/120741929 ................ EasyOCR做成服务
https://blog.csdn.net/qq_38017966/article/details/118724459...........几个入门级Python ocr识别库
https://mp.weixin.qq.com/s?__biz=MzA4NDUyNzA0Ng==&mid=2247485080&idx=1&sn=294b6395e28d7c33865dd6da1332022c ........................抠图
https://blog.csdn.net/wangdongwei0/article/details/89637748............识别判断图片主要颜色
https://zacksock.blog.csdn.net/article/details/103794134 ..................超全Python图像处理讲解
posted on 2019-10-11 14:29 chen_2987 阅读(1493) 评论(0) 编辑 收藏 举报