JAVA中通过JavaCV实现跨平台视频/图像处理-调用摄像头

news/2024/7/10 20:45:40 标签: java, 人工智能, ffmpeg

一、简介

  JavaCV使用来自计算机视觉领域(OpenCV, FFmpeg, libdc1394, PGR FlyCapture, OpenKinect, librealsense, CL PS3 Eye Driver, videoInput, ARToolKitPlus, flandmark, Leptonica, and Tesseract)领域的研究人员常用库的JavaCPP预设的封装。提供实用程序类,使其功能更易于在Java平台上使用,包括Android。
 
二、案例1:调用摄像头
(1)使用IDEA新建Maven项目,然后在pom.xml中引入下列依赖(因为要用到opencv来实现,所以需要引入opencv-platform包,此包会自动引入各大平台的依赖jar(内含dll)):
        <!-- https://mvnrepository.com/artifact/org.bytedeco/javacv-platform -->
        <dependency>
            <groupId>org.bytedeco</groupId>
            <artifactId>javacv-platform</artifactId>
            <version>1.4.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.bytedeco.javacpp-presets/opencv-platform -->
        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>opencv-platform</artifactId>
            <version>3.4.1-1.4.1</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

(2)测试类

import org.bytedeco.javacv.*;
import org.junit.Test;

import javax.swing.*;
import java.util.EnumSet;

public class JavaCVTest {

    @Test
    public void testCamera() throws InterruptedException, FrameGrabber.Exception {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
        grabber.start();   //开始获取摄像头数据
        CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
        canvas.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        canvas.setAlwaysOnTop(true);
        while (true) {
            if (!canvas.isDisplayable()) {//窗口是否关闭
                grabber.stop();//停止抓取
                System.exit(-1);//退出
            }

            Frame frame = grabber.grab();

            canvas.showImage(frame);//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
            Thread.sleep(50);//50毫秒刷新一次图像
        }
    }

    @Test
    public void testCamera1() throws FrameGrabber.Exception, InterruptedException {
        VideoInputFrameGrabber grabber = VideoInputFrameGrabber.createDefault(0);
        grabber.start();
        CanvasFrame canvasFrame = new CanvasFrame("摄像头");
        canvasFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        canvasFrame.setAlwaysOnTop(true);
        while (true) {
            if (!canvasFrame.isDisplayable()) {
                grabber.stop();
                System.exit(-1);
            }
            Frame frame = grabber.grab();
            canvasFrame.showImage(frame);
            Thread.sleep(30);
        }
    }
}

(3)两种方法的测试效果:

 

 

 
 

http://www.niftyadmin.cn/n/990409.html

相关文章

Linux 线程实现机制分析

2019独角兽企业重金招聘Python工程师标准>>> 简介&#xff1a; 自从多线程编程的概念出现在 Linux 中以来&#xff0c;Linux 多线应用的发展总是与两个问题脱不开干系&#xff1a;兼容性、效率。本文从线程模型入手&#xff0c;通过分析目前 Linux 平台上最流行的 L…

ubuntu12.04下载android源码

(以下的命令是在root账户登录前提下的&#xff0c;若是普通用户需要在命令前加sudo) 1.搭建java jdk1.6 请参考ubuntu安装java_jdk 2.添加包 64位系统&#xff1a; apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurs…

Swift 导入文件的问题

有的可以&#xff0c;有的不可以。如图?SnapKit 不导入就不可以&#xff0c;我们自己写的类HZPerson就可以。转载于:https://juejin.im/post/5b4720205188251b11095da2

Nginx的upstream_response_time

转载请注明文章出处&#xff1a;tlanyan.me/upstream_re… 前几日为了查看FPM的性能&#xff0c;在Nginx的配置里增加FPM响应时间的header: http {...server {...location ~ \.php$ {...add_header X-Upstream-Time $upstream_response_time;}} } 复制代码 今天闲来查看网页的响…

Zeal丨windows下离线文档阅读

Zeal丨windows下离线文档阅读 前言&#xff1a;大家写代码的时候总会有些方法或者属性不太清楚&#xff0c;这时候我们就会打开浏览器&#xff0c;然后找官方api或者直接搜索引擎找对应问题&#xff0c;无疑花费了大量的时间。所以&#xff0c;你需要一个桌面应用Zeal&#xf…

GetProcessImageFileNam取得EXE所在目录

一般是用GetModuleFileName&#xff0c;但这个函数需要对进程有可读可查询的权限&#xff0c;所以当进程只有可查询权限时&#xff0c;使用&#xff1a; HANDLE hProcess OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, PID);if (hProcess){char szPath[MAX_PATH] {0};GetPr…

C#之延迟加载

我们也许会遇到这样一种情况&#xff0c;我们有一个大家伙&#xff08;大对象&#xff09;需要创建&#xff0c;那么这个对象的创建时需要较长的时间&#xff0c;同时也需要在托管堆上分配较多的空间。 那么在.NET Framework 4 中提供了这样一个很聪明的方式&#xff1a;Lazy&l…

从YOLOv1到v3的进化之路

引言&#xff1a;如今基于深度学习的目标检测已经逐渐成为自动驾驶&#xff0c;视频监控&#xff0c;机械加工&#xff0c;智能机器人等领域的核心技术&#xff0c;而现存的大多数精度高的目标检测算法&#xff0c;速度较慢&#xff0c;无法适应工业界对于目标检测实时性的需求…