[BUG记录]javacv连接1080p摄像头图像扭曲、视频卡顿问题解决记录

1 篇文章 0 订阅

[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.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要快很多).
后续自己乱试才试出来是因为设置了帧率的问题。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值