2013-08-05 113 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

你已經解決了我一個問題,由於拍攝幀... –