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编辑  收藏  举报

导航