你只要抓屏,速度快了肯定要消耗CPU的。别说是python,就是用C写也是一样的。
抓屏函数在windows里有就有了。似乎是窗口句柄设置为0时就是整个屏幕。
纯python代码就不要想了,一定是通过第三方库。通过pywin32调用windows的API可以实现,也算是纯python代码吧。
binasciihexlify估计能满足你的要求。不过不建议把二进制数据用编解码来处理,因为编解码只是文本采用了不同的编码方案。而图像这些二进制有自己的含义,文本编解码方案不应该用在这些二进制文件上。s就是你的数据,你也别想看懂,除非你知道jpg格式。
Python文本识别使用的工具是PIL和pytesser。因为他们使用到很多的python库文件,为了避免一个个工具的安装,建议使用pythonxy
pytesser是OCR开源项目的一个模块,在Python中导入这个模块即可将中的文字转换成文本。pytesser调用了tesseract。当在Python中调用pytesser模块时,pytesser又用tesseract识别中的文字。pytesser的使用步骤如下:
首先,安装Python27版本,这个版本比较稳定,建议使用这个版本。
其次,安装pythoncv。
然后,安装PIL工具,pytesser的使用需要PIL库的支持。
接着下载pytesser
最后,将pytesser解压,这个是免安装的,可以将解压后的文件cut到Python安装目录的Lib\site-packages下直接使用,比如我的安装目录是:C:\Python27\Lib\site-packages,同时把这个目录添加到环境变量之中。
完成以上步骤之后,就可以编写文本识别的Python脚本了。参考脚本如下:
from pytesser import
import ImageEnhance
image = Imageopen('D:\\workspace\\python\\5png')
#使用ImageEnhance可以增强的识别率
enhancer = ImageEnhanceContrast(image)
image_enhancer = enhancerenhance(4)
print image_to_string(image_enhancer)
tesseract是谷歌的一个对进行识别的开源框架,免费使用,现在已经支持中文,而且识别率非常高,这里简要来个helloworld级别的认识
下载之后进行安装,不再演示。
在tesseract目录下,有个tesseractexe文件,主要调用这个执行文件,用cmd运行到这个目录下,在这个目录下同时放置一张需要识别的,这里是123jpg
然后运行:tesseract 123jpg result
会把123jpg自动识别并转换为txt文件到resulttxt
但是此时中文识别不好
然后找到tessdata目录,把engtraineddata替换为chi_simtraineddata,并且把chi_simtraineddata重命名为engtraineddata
ok,现在中文识别基本达到90%以上了
from PIL import Image
pic_path = 'logo_white_ee663702png'
im = Imageopen(pic_path)
# 这样就可以了
x, y = imsize
print "size: ", x, y
以下为 PIL Imagepy 源码
class Image:format = None
format_description = None
def __init__(self):
# FIXME: take "new" parameters / other image
# FIXME: turn mode and size into delegating properties
selfim = None
selfmode = ""
selfsize = (0, 0)
selfpalette = None
selfinfo = {}
selfcategory = NORMAL
selfreadonly = 0
# 可以看到,初始化时有属性 size
1、 定义x和y,画图展示,保存
其中dpi参数指定图像的分辨率为120
2、 优化绘图线条风格
线条颜色color
线条标记marker
线条风格linestyle
3、 坐标轴的控制
坐标轴范围和标题
坐标图上标记
坐标间隔设定
函数pltxticks()和pltxticks()用来实现对x轴和y轴坐标间隔(也就是轴记号)的设定。用法上,函数的输入是两个列表,第一个表示取值,第二个表示标记。当然如果你的标记就是取值本身,则第二个列表可以忽略
多图与子图
figure() 函数可以帮助我们同时处理生成多个图,而subplot()函数则用来实现,在一个大图中,出现多个小的子图。需要注意的是, figure() 中的参数为序号,一般是按序增加的,这里面还涉及一个当前图的概念,其中 subplot() 的参数有3个,分别为行数、列数、以及子图序号。比如 subplot(1,2,1) 表示这是一个1行,2列布局的图(两个子图,在同一行,分居左右),其中,当前处理的子图是第一个图(也就是左图)。
这样,我们就用一个脚本画了两张图fig1和fig2。其中,fig1包含了分居左右的两个子图,分别是y1和y3的曲线;fig2是一张整图,画的是y2曲线。
如果想要某个子图占据整行或者整列,可以采用下面
第三个图,实际上相当于将前面的两个小的子图看作是一个整图
cv2imshow("left", img_left)
filename3=str(number)+'n3'+'jpg' #打印第number张+增值方式+保存类型
cv2imwrite(savedpath + filename3, img_left)
"""
# 数据增强实现
"""
import cv2
import numpy as np
import os
# 图像平移
def img_translation(image):
# 图像平移 下、上、右、左平移
M = npfloat32([[1, 0, 0], [0, 1, 100]])
img_down = cv2warpAffine(image, M, (imageshape[1], imageshape[0]))
M = npfloat32([[1, 0, 0], [0, 1, -100]])
img_up = cv2warpAffine(image, M, (imageshape[1], imageshape[0]))
M = npfloat32([[1, 0, 100], [0, 1, 0]])
img_right = cv2warpAffine(image, M, (imageshape[1], imageshape[0]))
M = npfloat32([[1, 0, -100], [0, 1, 0]])
img_left = cv2warpAffine(image, M, (imageshape[1], imageshape[0]))
# 保存,需要保存上述的哪一,就在cv2imwrite()中,将哪一名放入。
# filename='xxx' +'jpeg'
# cv2imwrite(savedpath + filename, img_left)
# 显示图形
cv2imshow("down", img_down)
filename0=str(number)+'n0'+'jpg'
cv2imwrite(savedpath + filename0, img_down)
cv2imshow("up", img_up)
filename1=str(number)+'n1'+'jpg'
cv2imwrite(savedpath + filename1, img_up)
cv2imshow("right", img_right)
filename2=str(number)+'n2'+'jpg'
cv2imwrite(savedpath + filename2, img_right)
cv2imshow("left", img_left)
filename3=str(number)+'n3'+'jpg'
cv2imwrite(savedpath + filename3, img_left)
# 图像缩放
def img_scale(image):
result = cv2resize(image, (224, 224))
cv2imshow("scale", result)
filename=str(number)+'n5'+'jpg'
cv2imwrite(savedpath + filename, result)
# 图像翻转
def img_flip(image):
# 0以X轴为对称轴翻转,>0以Y轴为对称轴翻转, <0X轴Y轴翻转
horizontally = cv2flip(image, 0) # 水平镜像
vertically = cv2flip(image, 1) # 垂直镜像
hv = cv2flip(image, -1) # 水平垂直镜像
# 显示图形
cv2imshow("Horizontally", horizontally)
filename1=str(number)+'n6'+'jpg'
cv2imwrite(savedpath + filename1, horizontally)
cv2imshow("Vertically", vertically)
filename2=str(number)+'n7'+'jpg'
cv2imwrite(savedpath + filename2, vertically)
cv2imshow("Horizontally & Vertically", hv)
filename3=str(number)+'n8'+'jpg'
cv2imwrite(savedpath + filename3, hv)
# 图像旋转
def img_rotation(image):
# 原图的高、宽 以及通道数
rows, cols, channel = imageshape
# 绕图像的中心旋转
# 参数:旋转中心 旋转度数 scale
M = cv2getRotationMatrix2D((cols / 2, rows / 2), 30, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated = cv2warpAffine(image, M, (cols, rows))
# 显示图像
cv2imshow("rotated", rotated)
filename1=str(number)+'n9'+'jpg'
cv2imwrite(savedpath + filename1, rotated)
#选装60度
W = cv2getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated1 = cv2warpAffine(image, W, (cols, rows))
cv2imshow("rotated", rotated)
filename2=str(number)+'n12'+'jpg'
cv2imwrite(savedpath + filename2, rotated1)
#选装145度
W = cv2getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated2 = cv2warpAffine(image, W, (cols, rows))
cv2imshow("rotated", rotated)
filename3=str(number)+'n13'+'jpg'
cv2imwrite(savedpath + filename3, rotated2)
# 图像加噪
def img_noise(image, mean=0, var=0001):
'''
添加高斯噪声
mean : 均值
var : 方差
'''
image = nparray(image / 255, dtype=float)
noise = nprandomnormal(mean, var 05, imageshape)
out = image + noise
if outmin() < 0:
low_clip = -1
else:
low_clip = 0
out = npclip(out, low_clip, 10)
out = npuint8(out 255)
cv2imshow("noise", out)
filename3=str(number)+'n10'+'jpg'
cv2imwrite(savedpath + filename3, out)
# 图像亮度调节
def img_brightness(image):
contrast = 1 # 对比度
brightness = 100 # 亮度
pic_turn = cv2addWeighted(image, contrast, image, 0, brightness)
# cv2addWeighted(对象,对比度,对象,对比度)
'''cv2addWeighted()实现的是图像透明度的改变与图像的叠加'''
cv2imshow('bright', pic_turn) # 显示
filename3=str(number)+'n11'+'jpg'
cv2imwrite(savedpath + filename3, pic_turn)
if __name__ == '__main__':
i = 0
path = '/Data/'
print(path)
savedpath = '/result_new/'
filelist = oslistdir(path)
total_num = len(filelist)
for item in filelist:
number = i + 1
i = number
print("######")
print("打印到第",i,"张")
src = cv2imread(path + item)
img_translation(src)
img_scale(src)
img_flip(src)
img_rotation(src)
img_noise(src)
img_brightness(src)
cv2waitKey(0)
cv2destroyAllWindows()
代码较为繁琐,有空之后进行优化
输出结果
以上就是关于python如何快速获取屏幕的所有像素全部的内容,包括:python如何快速获取屏幕的所有像素、Python中读取二进制图片(例如 a.jpg)有关解码编码的问题、Python如何图像识别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)