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

一、简介

  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)两种方法的测试效果:

 

 

 
 

转载于:https://www.cnblogs.com/songxingzhu/p/9088204.html

Java捕获USB摄像头的视频流,可以通过使用JavaCVJava Media Framework (JMF)来实现。以下是一个简单的介绍和步骤: 1. JavaCV是一个封装了OpenCV、FFmpeg等常用多媒体处理库的Java接口,可以方便地处理图像、视频和音频。要使用JavaCV捕获视频,首先需要添加JavaCV的依赖库。在项目加入对应的Maven依赖或直接添加jar包即可。 2. 使用JavaCV时,可以利用VideoInputFrameGrabber类来捕获视频流。首先需要初始化该类,并指定摄像头的索引或名称,然后打开摄像头,最后通过循环获取帧数据。 3. JMF是Java早期的多媒体框架,通过它也可以实现视频捕获。首先需要确保JMF库已经被添加到项目。然后可以创建一个捕获器,例如使用CaptureDeviceManager类来获取和管理摄像头设备,并创建一个CaptureDevice对象。接着通过MediaLocator指定摄像头设备,创建一个CaptureDeviceInfo对象,并使用它来初始化CaptureDeviceManager。 示例代码(JavaCV): ```java import org.bytedeco.javacv.CanvasFrame; import org.bytedeco.javacv.FrameGrabber; import org.bytedeco.javacv.Frame; public class USBCameraCapture { public static void main(String[] args) throws Exception { FrameGrabber grabber = FrameGrabber.createDefault(0); // 0代表默认摄像头,可以更改为特定摄像头的ID或名称 grabber.start(); CanvasFrame canvas = new CanvasFrame("USB Camera Capture"); canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); while (canvas.isVisible()) { Frame frame = grabber.grab(); if (frame != null) { canvas.showImage(frame); } } grabber.stop(); canvas.dispose(); } } ``` 示例代码(JMF): ```java import javax.media.*; import javax.media.control.*; import java.awt.*; public class USBCameraCapture { public static void main(String[] args) { try { // 获取默认摄像头 String deviceName = CaptureDeviceManager.getDeviceNameclosestMatch(new MediaLocator("vfw:")); CaptureDeviceInfo info = CaptureDeviceManager.getDevice(deviceName); CaptureDevice device = info.getDevice(); // 创建一个捕获会话 CaptureDeviceManager.addCaptureDevice(device); Player player = Manager.createRealizedPlayer(device.getLocator()); player.start(); // 显示捕获的视频 Component comp = player.getVisualComponent(); comp.setSize(320, 240); JFrame frame = new JFrame("USB Camera Capture"); frame.add(comp); frame.setSize(640, 480); frame.setVisible(true); // 注意:JMF的使用较为复杂,可能需要处理各种事件和状态转换,这里只提供了最基础的框架。 } catch (Exception e) { e.printStackTrace(); } } } ``` 在实现时需要确保已经正确安装和配置了所有的库和依赖,并且需要处理异常和资源释放等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值