2013-08-05 112 views
2

我有一个程序可以每隔1秒打印屏幕截图,但是在屏幕截图中,当屏幕包含黑色图片时,存储的图像包含大量噪音。
任何人都可以告诉我,如何减少这些快照图像的噪音内容。打印屏幕噪音

以下代码我用于屏幕截图。

public class Beginning implements Runnable { 

    private Thread thread; 
    private static long counter = 0; 
    private final int FRAME_CAPTURE_RATE = 1000; 
    private Robot robot; 

    public Beginning() throws Exception { 
     robot = new Robot(); 
     thread = new Thread(this); 
     thread.start(); 
    } 

    public static void main(String[] args) throws Exception { 
     Beginning beginning = new Beginning(); 
    } 

    public void run() { 
     for (;;) { 
      try { 
       Rectangle screenRect = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
       BufferedImage bufferedImage = robot.createScreenCapture(screenRect); 
       ImageIO.write(bufferedImage, "png", new File("D:\\CapturedFrame\\toolImage" + counter + ".png")); 
       counter++; 
       thread.sleep(FRAME_CAPTURE_RATE); 
      } catch (Exception e) { 
       System.err.println("Something fishy is going on..."); 
      } 
     } 
    } 
} 

还告诉我,我怎么能做到这一点没有播放视频屏幕,意味着我必须只给视频的位置,然后我的程序将捕获从它的帧,并且从中去除噪声,然后保存在指定地点

+1

它似乎很好地工作对我来说,可以提供一些示例和预期输出图像? – MadProgrammer

+1

@MadProgrammer,雅肯定的是,我在玩一个黑暗的视频,然后从它拍摄图像,这是一个简单的快照链接包含噪声(https://www.dropbox.com/s/a1pyj68aifevr7x/toolImage2.png) –

+0

@ user2320537 - 那么预期的(不是嘈杂的)图像是什么样的? –

回答

0

如果您不需要做编程VLC播放有一个选项来创建帧的图像,请参见: http://www.isimonbrown.co.uk/vlc-export-frames

如果需要从程序运行,并且不想让视频播放 - 我推荐使用命令行工具,如ffmpeg,并通过运行时执行程序从java调用它,例如

Runtime.getRuntime()。exec(“INSERT FFMPEG COMMAND HERE”);

为ffmpeg的一些示例命令可以在这里找到:

http://trac.ffmpeg.org/wiki/Create%20a%20thumbnail%20image%20every%20X%20seconds%20of%20the%20video

例如每秒1帧:

的ffmpeg -i input.flv -f IMAGE2 -vf FPS = FPS = 1出来%d.png

+0

我如何能重复使用的ffmpeg ... –

+0

你已经解决了我一个问题,由于拍摄帧... –