2013-08-05 5 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 exec, т.е.

Runtime.getRuntime(). Exec ("INSERT FFMPEG COMMAND ЗДЕСЬ");

Некоторые примеры команд для FFmpeg можно найти здесь:

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

например, 1 кадр в секунду:

FFmpeg -i -f input.flv image2 -vf кадров в секунду = FPS = 1 из% d.png

+0

как я могу повторно захватить кадры с помощью ffmpeg ... –

+0

вы решили мою одну проблему, спасибо ... –

Смежные вопросы