You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora 35系统下如何将截图以字节形式获取?

在Fedora 35下实现截图转字节并接入OpenCV的方案

核心思路

要实现Windows下win32ui类似的截图转字节、接入OpenCV高帧率显示的功能,在Fedora 35上可以通过轻量高效的跨平台截图库或Qt框架实现,以下是两种实用方案:


方案一:使用mss库(高帧率首选)

mss是一款专注于屏幕捕获的轻量库,性能优异,能轻松达到30-60fps的刷新需求,支持直接将截图转为字节流,再转成numpy数组供OpenCV使用。

步骤:

  1. 安装依赖:
pip install mss opencv-python numpy
  1. 示例代码:
import mss
import numpy as np
import cv2

# 初始化屏幕捕获对象
with mss.mss() as sct:
    # 选择要捕获的显示器(1为主显示器,0为所有显示器拼接)
    monitor = sct.monitors[1]
    
    while True:
        # 捕获屏幕帧
        sct_frame = sct.grab(monitor)
        # 将截图转为字节流
        img_bytes = sct_frame.tobytes()
        # 字节流转numpy数组(BGRA格式)
        frame = np.frombuffer(img_bytes, dtype=np.uint8).reshape(sct_frame.height, sct_frame.width, 4)
        # 转换为OpenCV支持的BGR格式(去掉alpha通道)
        frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
        
        # 高帧率显示
        cv2.imshow("Screen Capture", frame)
        # 按Q键退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

cv2.destroyAllWindows()

方案二:使用PyQt5框架(Wayland兼容)

如果你的Fedora 35使用默认的Wayland会话,mss可能存在捕获限制,此时可以用PyQt5的屏幕捕获API,它对Wayland的兼容性更好,同样能实现转字节、接入OpenCV的流程。

步骤:

  1. 安装依赖:
pip install pyqt5 opencv-python numpy
  1. 示例代码:
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import QScreen
import numpy as np
import cv2
import sys

# 初始化Qt应用
app = QApplication(sys.argv)
screen = QApplication.primaryScreen()

while True:
    # 捕获整个屏幕
    qt_frame = screen.grabWindow(0)
    # 将Qt截图转为字节流
    img_bytes = qt_frame.toImage().bits().asstring(qt_frame.byteCount())
    # 字节流转numpy数组(BGRA格式)
    frame = np.frombuffer(img_bytes, dtype=np.uint8).reshape(qt_frame.height(), qt_frame.width(), 4)
    # 转换为BGR格式供OpenCV使用
    frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
    
    # 显示画面
    cv2.imshow("Screen Capture", frame)
    # 按Q键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cv2.destroyAllWindows()
sys.exit(app.exec_())

关键说明

  • 帧率优化:两种方案都能达到30-60fps的需求,mss因为更专注于截图,性能略优于PyQt5。
  • Wayland适配:若使用Wayland会话,优先选择PyQt5方案;若切换到Xorg会话(登录时选择"GNOME on Xorg"),两种方案都能正常工作。
  • 字节流转换:核心是通过库自带的tobytes()或bits().asstring()方法将截图转为原始字节,再用np.frombuffer()转成numpy数组,无缝对接OpenCV。

内容的提问来源于stack exchange,提问作者Noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:20:33