m0_59138898 2024-05-07 17:45 采纳率: 0%
浏览 9

python 监视电脑屏幕

import mss
import cv2
import numpy as np

# 使用 with 语句创建 mss 实例
with mss.mss() as sct:
    # 设置截取屏幕图像的参数,top为起始位置
    # width和height为截取的矩形宽和高
    monitor = {"top": 0, "left": 0, "width": 1920, "height": 1080}

    # 不断循环截取屏幕图像
    while True:
        # 使用mss库的 grab() 方法获取屏幕图像
        screenshot = sct.grab(monitor)

        # 将截取的屏幕图像转换为OpenCV可以处理的格式
        img = np.array(screenshot)  # 将图像数据转换为 numpy 数组格式
        img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)  # 转换为OpenCV支持的BGR格式
        cv2.namedWindow("test", cv2.WINDOW_NORMAL)
        # 在窗口中显示处理后的图像
        cv2.imshow("screenshot", img)
        if cv2.waitKey(1) & 0xFF == ord("q"):  # 检测键盘输入,按下q键退出窗口
            break

    # 程序结束后,关闭图像显示窗口
cv2.destroyAllWindows()

代码运行后图片是折叠往下压的显示,怎么填充正常显示。

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 17:45
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的代码中,图像显示不正常可能是由于颜色通道顺序的问题。OpenCV默认使用BGR(蓝、绿、红)格式,而mss库返回的截图是以BGRA(蓝、绿、红、Alpha透明度)格式存储的。因此,在将屏幕截图转换为OpenCV可以处理的格式时,我们需要确保颜色通道正确。您可以尝试调整颜色通道转换部分的代码,去掉Alpha通道,只保留RGB三通道。

    以下是修改后的代码:

    import mss
    import cv2
    import numpy as np
    
    # 使用 with 语句创建 mss 实例
    with mss.mss() as sct:
        # 设置截取屏幕图像的参数,top为起始位置
        # width和height为截取的矩形宽和高
        monitor = {"top": 0, "left": 0, "width": 1920, "height": 1080}
    
        # 不断循环截取屏幕图像
        while True:
            # 使用mss库的 grab() 方法获取屏幕图像
            screenshot = sct.grab(monitor)
    
            # 将截取的屏幕图像转换为OpenCV可以处理的格式
            img = np.array(screenshot)  # 将图像数据转换为 numpy 数组格式
            # 只保留RGB三通道,去掉Alpha通道
            img = img[:, :, :3]
            img = cv2.cvtColor(img, cv2.COLOR_BGR2BGR)  # 转换为OpenCV支持的BGR格式
            cv2.namedWindow("test", cv2.WINDOW_NORMAL)
            # 在窗口中显示处理后的图像
            cv2.imshow("screenshot", img)
            if cv2.waitKey(1) & 0xFF == ord("q"):  # 检测键盘输入,按下q键退出窗口
                break
    
        # 程序结束后,关闭图像显示窗口
    cv2.destroyAllWindows()
    

    这段代码会从屏幕抓取图像,并将其正确地转换为BGR格式,然后在窗口中正常显示。现在应该可以看到正常的屏幕截图了。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥15 非科班怎么跑代码?如何导数据和调参
  • ¥15 福州市的全人群死因监测点死亡原因报表
  • ¥15 Altair EDEM中生成一个颗粒,并且各个方向没有初始速度
  • ¥15 系统2008r2 装机配置推荐一下
  • ¥500 服务器搭建cisco AnyConnect vpn
  • ¥15 悬赏Python-playwright部署在centos7上
  • ¥15 psoc creator软件有没有人能远程安装啊
  • ¥15 快速扫描算法求解Eikonal方程咨询
  • ¥15 校内二手商品转让网站
  • ¥20 高德地图聚合图层MarkerCluster聚合多个点,但是ClusterData只有其中部分数据,原因应该是有经纬度重合的地方点,现在我想让ClusterData显示所有点的信息,如何实现?