打印屏幕时出现噪音

时间:2013-08-05 06:43:19

标签: java image noise

我有一个可以每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...");
            }
        }
    }
}

还告诉我如何在不播放屏幕中的视频的情况下执行此操作,意味着我必须只提供视频位置,然后我的程序将从中捕获帧并从中删除噪声然后将其保存在< strong>指定位置。

1 个答案:

答案 0 :(得分:0)

如果您不需要以编程方式执行此操作,VLC播放器可以选择创建帧的图像,请参阅: http://www.isimonbrown.co.uk/vlc-export-frames

如果您需要从程序运行而不想播放视频 - 我建议使用命令行工具,例如ffmpeg,并通过Runtime exec从java调用它。

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

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

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

e.g。每秒1帧:

ffmpeg -i input.flv -f image2 -vf fps = fps = 1 out%d.png