python如何快速获取屏幕的所有像素

python如何快速获取屏幕的所有像素,第1张

你只要抓屏,速度快了肯定要消耗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如何图像识别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9336499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存