【问题标题】:Fast screen captures for real-time processing用于实时处理的快速屏幕截图
【发布时间】:2012-04-06 14:44:18
【问题描述】:

我正在使用 Matlab 和 Java Robot 类(从 Matlab 调用)编写一个自动化 UI 测试套件。基本的控制流程是这个循环:

  1. 使用 Robot 截取 Direct X 应用程序的屏幕截图
  2. 使用 Matlab 进行一些处理
  3. 使用 Robot 以编程方式按下某些键

我需要对这些步骤进行快速且一致的计时(步骤 1-3 最好每 200 毫秒发生一次)。第 2 步和第 3 步很好,但是屏幕截图太慢、不一致且依赖于机器(我的笔记本电脑需要 200-500 毫秒的屏幕捕获时间,而我的桌面速度更快,但仍远低于我的理想状态)。 是否有任何 Matlab/Simulink 软件包可以让屏幕截图更加快速和一致?

我考虑过 Simulink Real-Time Windows Target,但我不知道在 simulink 中截屏是否是一种有效的输入形式(这似乎有点矫枉过正)。 我还研究了图像采集工具箱,以便使用它来拍摄屏幕截图,但不清楚它是否提供该功能(它主要处理硬件图像捕获设备)。 这是我用于计时目的的屏幕截图代码:

import java.io.*;
import java.awt.*;
robot = Robot;
tool = Toolkit.getDefaultToolkit();
for n = 1:100
    tic
    img = robot.createScreenCapture(Rectangle(tool.getScreenSize()));
    pic = java_img2mat(img);
    screen = rgb2gray(pic);
    screen = screen(1:end-100,:);
    t(n) = toc;
end

以及用于将java图像转换为Matlab可用形式的函数:

function image = java_img2mat(javaimg)
import java.io.*;
import java.awt.*;    
      H = javaimg.getHeight;
      W = javaimg.getWidth;
     % repackage as a 3D array (MATLAB image format)
  image = uint8(zeros([H,W,3]));
  pixelsData = uint8(javaimg.getData.getPixels(0,0,W,H,[]));
  for i = 1 : H
  base = (i-1)*W*3+1;
  image(i,1:W,:) = deal(reshape(pixelsData(base:(base+3*W-1)),3,W)');
  end
end

【问题讨论】:

  • 如果这个问题存在很长时间,您可以在此处发布 Simulink 相关部分 (mathworks.com/matlabcentral/answers)。请务必使用“Simulink”标记您的问题,以让专家(不幸的是,不是我)看到它。
  • 也发到那里了,两个地方都没有回复:(
  • 您可以发送电子邮件至 Mathworks 技术支持,support@mathworks.com。我总是对他们提供的帮助感到惊讶。祝你好运。

标签: matlab real-time screenshot simulink


【解决方案1】:

使用分析器检查您在软件中的哪些地方存在延迟,并尝试在这些点优化代码:

http://www.mathworks.se/help/techdoc/matlab_env/f9-17018.html

http://www.mathworks.se/help/techdoc/ref/profile.html

使用 DPC 延迟检查器检查您是否达到了系统的限制 - 这样您就可以测试后台服务的运行情况或在一定程度上比较图形硬件:

http://www.thesycon.de/deu/latency_check.shtml

【讨论】:

    【解决方案2】:

    不确定这么多年后是否还有人关心,但这个人缩小了范围here

    在我的机器(大约有 10 年的历史)上需要大约 80 毫秒来生成屏幕截图并将其转换为 MATLAB 友好格式。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-13
      • 2015-04-06
      • 1970-01-01
      • 2011-02-24
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多