[BUG记录]javacv连接1080p摄像头图像扭曲、视频卡顿问题解决记录
环境
win10 64位系统 java version “1.8.0_172” 摄像头:罗技C920 javacv版本:1.4.2
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.4.2</version>
</dependency>
问题描述
OpenCVFrameGrabber设置分辨率为1080P后出现图像扭曲的情况。如下图所示:
问题代码
import org.bytedeco.javacv.*;
import javax.swing.*;
public class AAA {
public static void main(String[] args) throws Exception {
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.setFormat("MJPG");
grabber.setImageWidth(1920);
grabber.setImageHeight(1080);
grabber.start();
System.out.println(grabber.getFormat());
System.out.println(grabber.getFrameRate());
CanvasFrame canvas = new CanvasFrame("");
canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
while (true) {
if (!canvas.isEnabled()) {
grabber.stop();
System.exit(0);
}
Frame frame = grabber.grabFrame();
canvas.showImage(frame);
}
}
}
解决方法
设置format为MJPG,且不要设置frameRate。
解决代码
OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.setFormat("MJPG");
grabber.setImageWidth(1920);
grabber.setImageHeight(1080);
grabber.start();
解决后
总结
从发现问题到解决一共花了两天,时间主要浪费在了搭建C++环境(因为从外网查到的一篇资料说可能是因为Java的性能问题),但是用C++调用opencv也会出现相同的扭曲现象(但C++打开摄像头的速度比Java要快很多). 后续自己乱试才试出来是因为设置了帧率的问题。。
|