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.setFrameRate(1); 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.setFrameRate(1); 设置帧率会使设置的格式失效 grabber.setImageWidth(1920); grabber.setImageHeight(1080); grabber.start(); //略
从发现问题到解决一共花了两天,时间主要浪费在了搭建C++环境(因为从外网查到的一篇资料说可能是因为Java的性能问题),但是用C++调用opencv也会出现相同的扭曲现象(但C++打开摄像头的速度比Java要快很多).
后续自己乱试才试出来是因为设置了帧率的问题。。