python-3.x - 从屏幕抓取图像到 numpy 数组并将其显示为黑白图像
问题描述
我正在尝试从屏幕的某个部分读取图像数据,因此我可以以numpy
数组的形式对其进行后处理。这是我到目前为止所尝试的:
import numpy as np
from PIL import ImageGrab, Image
img = ImageGrab.grab(bbox=(798, 166, 300, 400)) # (bbox=x,y,width,height)
img_np = np.array(img)
但是当我尝试打印时img_np
,它会返回:
<PIL.Image.Image image mode=RGB size=0x234 at 0x109F8F0>
它看起来不像是一个numpy
数组。我还想显示阵列中的黑白图像numpy
以验证我所做的是否正确(并且numpy
将来还显示处理过的阵列)。有什么我做错了吗?
解决方案
我认为你的
(bbox=798, 166, 300, 400))
x=798在你的屏幕上
所以你必须在你的屏幕上制作你的 (x,y) 。
看这张照片: 在此处输入图像描述 结果为无,因为它无法捕获您的屏幕
当我修改 x=100 时,它可以 在此处输入图像描述
编码:
import numpy as np
from PIL import ImageGrab,Image
img=ImageGrab.grab(bbox=(798,166,300,400)) #798
# img=Image.open("Modric.jpg")
print(type(img))
img_np=np.array(img)
print(type(img_np))
print(img_np.shape)
结果:
<class 'PIL.Image.Image'>
<class 'numpy.ndarray'>
() *******None
在x=100之后:
import numpy as np
from PIL import ImageGrab,Image
img=ImageGrab.grab(bbox=(100,166,300,400)) #798
# img=Image.open("Modric.jpg")
print(type(img))
img_np=np.array(img)
print(type(img_np))
print(img_np.shape) code here
结果:
<class 'PIL.Image.Image'>
<class 'numpy.ndarray'>
(234, 200, 3)
正确的x坐标和屏幕,它可以工作
对不起第一个问题,权利在这里
import tkinter
win=tkinter.Tk()
width=win.winfo_screenwidth() #get your screen's width
height=win.winfo_screenheight() #get your screen's height
print(width,height)
img=ImageGrab.grab(bbox=(300,400,width,height)).convert("L") #798
img_np=np.array(img)
print(img_np.shape)
结果:
1536 864
(464, 1236)
当您使用 bbox=(x,y,width,height) 时,像素计数方法是 width-x 和 height-y 。所以你必须让你的宽度> x 和高度> y 并且它可以工作
至于转换为灰度图像,你可以使用opencv
import cv2
gray=cv2.cvtColor(img_np,cv2.COLOR_RGB2GRAY)[enter link description here][3]
链接 或 PIL convert("L") 函数
img=ImageGrab.grab(bbox=(300,400,width,height)).convert("L") #798
or
公式:
def rgb2gray(rgb):
"""
gray=0.299*R+0.587*G+0.144*B
"""
return np.uint8(np.dot(rgb[...,:3], [0.299, 0.587, 0.114]))
推荐阅读
- c++ - 在带有 CLion 的 Mac 上使用 C++ 连接 MySQL 数据库时出现问题
- python - 添加可滚动画布时出现不需要的边框
- c# - c#枚举。获取像字符串一样的数值
- html - 将每个对象居中对齐
- apache-kafka - Quarkus 应用程序中 Kafka 反序列化器中的 CDI 上下文
- php - 显示适用于 SSMS 的 SQL Server 查询时 PHP 抛出错误
- angular - 使用 jsZIP 在一个 zip 文件夹中下载多个 csv 文件
- android - 尝试通过usb调试在android studio上运行应用程序时,有没有办法清除错误消息?
- amazon-web-services - 使用没有文件夹路径的cli上传到aws s3
- javascript - 使用 Javascript 将更大的内容减少到很小的内容