0

我需要得到两个 GTK 3 pixbuf 图像之间的区别。截屏是为了获取图像。 get_byte_length为不同的图像给出相同的值。我怎么能得到差异?

这是代码:

    window = Gdk.get_default_root_window()
    x, y, width, height = window.get_geometry()

    pb = Gdk.pixbuf_get_from_window(window, x, y, width, height)
    length1 = pb.get_byte_length()


Python 3.8, GTK 3.
4

4 回答 4

1

我不是高级 Gtk 或 python 程序员,但据我所知,纯 python 和 GTK3 没有直接捕获 FPS 的能力。您可能会使用一些方法来实现这一点,但是通过分析图像来发现图像之间的差异可能在 CPU 使用率方面很难,因为有时必须在一秒钟内重复大约 60 次或更多次的过程。您可以尝试获取图像的大小并进行比较,但对于 FPS 计数器,CPU 使用率可能很高(我不确定)。此外,您还必须找到一种方法来比较图像的大小,而无需按照您在问题中提出的要求将它们保存在磁盘上。当在一秒钟内非常频繁地重复时,保存磁盘操作也会消耗 CPU 资源。

更新:主题可能会提供一些有关获取 python 对象的内存大小的信息。

于 2021-04-07T15:54:32.353 回答
0

您可以使用 glibget_real_time()函数来测量每秒的进程。

get_real_time()以微秒为单位给出结果(每秒 100 万)

import gi
from gi.repository import GLib

count = 0
time = GLib.get_real_time()

limit = time + 1000000

while GLib.get_real_time() < limit :
    #take screenshots here
    count += 1

print (count)

这个函数会统计cpu在一秒内可以截屏多少次。

于 2021-04-02T05:58:12.160 回答
0

一般的想法是

选项 1:将两个图像加载为数组 (scipy.misc.imread) 并计算逐个元素(逐个像素)的差异。计算差异的范数。

选项 2:加载两个图像。为它们中的每一个计算一些特征向量(如直方图)。计算特征向量而不是图像之间的距离。

于 2021-04-01T06:39:13.733 回答
0

通过 gtk.gdk.CairoContext 检索 Cairo 上下文与将 Pixbuf 转换为 Cairo 渲染 Pixbuf 存在性能差异。使用此代码:

cr.set_source(imgSurface)

cr.rectangle(0, 0, imgSurface.get_width(), imgSurface.get_height())

cr.fill()

它猜它还涉及

.set_source_pixbuf() 和 .get_source().get_surface()。

于 2021-03-31T18:26:15.540 回答