【问题标题】:GTK - Python Getting Difference Between Pixbuf ImagesGTK - Python 获取 Pixbuf 图像之间的差异
【发布时间】:2021-03-29 17:29:06
【问题描述】:

我需要了解两个 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.

【问题讨论】:

    标签: python python-3.x gtk gtk3 pixbuf


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      通过 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()。

      【讨论】:

      • 它可能会提高性能,谢谢。但是我怎样才能在字节等方面获得两个图像之间的差异?我需要换屏。为了做到这一点,我反复获取屏幕截图。我不需要在 GUI 上显示图像。
      • 如果屏幕截图相似,则大部分时间字节都是相同的。你想检测它们的变化吗?
      • @Ulises Martínez Elías,我对图像之间的视觉差异不感兴趣。我想检测屏幕变化以测量帧速率。有趣的是,即使屏幕上的视觉变化很大,这两个图像的字节也是相同的。您对仅使用 GTK 和 python(没有任何外部依赖项)来获得帧速率有什么不同的想法吗?
      • 你是说fps吗?获取每秒捕获的屏幕截图数,但我不确定它是否是可靠的测量值
      • @Ulises Martínez Elías,您建议使用 python 或 gtk 而不使用外部依赖项来做到这一点??
      【解决方案3】:

      总体思路是这样的

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

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

      【讨论】:

        【解决方案4】:

        您可以使用 glib get_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-07-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-09
          • 1970-01-01
          • 2015-01-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多