我正在尝试使用JavaFX逐帧播放分辨率为1920x1080的视频,因为我想在每个帧上应用一些修改,但是当我启动程序时,我看到视频播放速度非常慢。
原因是什么?我该如何改进呢?
我是怎么做到的:
@Override
public void run() {
synchronized (this) {
while (runnable) {
if (webSource.grab()) {
try {
webSource.retrieve(frame);
numberOfFrames++;
Mat resize_blur_Img = frame.clone();
Imgproc.GaussianBlur(resize_blur_Img, resize_blur_Img, new Size(9, 9), 2, 2);
Mat fgMask = new Mat();
mog2.apply(resize_blur_Img, fgMask, 0.01);
Mat output = new Mat();
Mat closeElement = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(7, 7),
new Point(3, 3));
Imgproc.morphologyEx(fgMask, output, Imgproc.MORPH_CLOSE, closeElement);
Imgproc.morphologyEx(output, output, Imgproc.MORPH_CLOSE, closeElement);
Imgproc.threshold(output, output, 127, 255, Imgproc.THRESH_BINARY);
contourImg = new Mat();
contourImg = output.clone();
findContours(contourImg);
Imgcodecs.imencode(".bmp", frame, mem);
image = ImageIO.read(new ByteArrayInputStream(mem.toArray()));
BufferedImage bufferedImage = (BufferedImage) image;
imgView.setImage(SwingFXUtils.toFXImage(bufferedImage, null));
Imgcodecs.imencode(".bmp", output, mem2);
image2 = ImageIO.read(new ByteArrayInputStream(mem2.toArray()));
BufferedImage bufferedImage2 = (BufferedImage) image2;
imgViewLeft3.setImage(SwingFXUtils.toFXImage(bufferedImage2, null));
if (runnable == false) {
System.out.println("Going to wait() -> DaemonThread");
this.wait();
}
} catch (Exception ex) {
System.out.println("Error");
}
} else {
runnable = false;
}
}
}
}