我注意到 Windows 中的 Gtk 似乎使用 CPU 而不是 GPU 渲染图像(而在 Linux 中似乎并非如此)。
我正在使用 Python、Gtk3 和 OpenCV 创建一个程序,该程序从摄像机流式传输视频并将其显示在 GtkImage 中。该程序可以运行,但是当我将图像调整为更大的分辨率时,帧率似乎下降了。我注意到 CPU 使用率越高,图像越大。
这里是一段代码:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk, GdkPixbuf, GLib
# This method is called in a thread that read() frames from cv2.VideoCapture and displays it into a GtkImage.
def writeDisplay(uiBuilder, frame):
# Load frame from OpenCV into pixbuf
frame = cv.cvtColor(frame, cv.COLOR_BGR2RGB)
h, w, d = frame.shape
pixbuf = GdkPixbuf.Pixbuf.new_from_data(
frame.tostring(), GdkPixbuf.Colorspace.RGB, False, 8, w, h, w*d)
# Load image into GtkImage
imageDisplay = uiBuilder.get_object("display")
GLib.idle_add(imageDisplay.set_from_pixbuf, pixbuf)
pass
在 Linux 中,我没有注意到任何帧丢失,这表明 GtkImage 是由 GPU 渲染的。然而,在 Windows 中它似乎是软件渲染的。
我还应该注意,我在使用 Msys2 的 Windows 中使用PyGObject。
有没有办法使用硬件加速将视频帧从 OpenCV 流式传输到 Gtk3 GUI?