我有一个可以每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>指定位置。
答案 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