1

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

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

4

1 回答 1

1

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

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

Runtime.getRuntime().exec("在此处插入 FFMPEG 命令");

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 out%d.png

于 2013-08-07T13:09:25.070 回答