功能说明:希望在现有JFrame的右下角实现一个摄像头实时视频的小窗口,记录一下实现的过程。

1、javaCV环境配置

这里不再赘述了,可以参考 https://blog.csdn.net/liyuqian199695/article/details/53925478

注:jar包导入时要匹配电脑的系统版本。

下面是测试代码

import javax.swing.JFrame;

import org.bytedeco.javacv.CanvasFrame;

import org.bytedeco.javacv.FrameGrabber.Exception;

import org.bytedeco.javacv.OpenCVFrameGrabber;

public class JavacvCameraTest

{

public static void main(String[] args) throws Exception, InterruptedException

{

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

grabber.start(); //开始获取摄像头数据

CanvasFrame canvas = new CanvasFrame("Camera");//新建一个窗口

canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

canvas.setAlwaysOnTop(true);

while(true)

{

if(!canvas.isDisplayable())

{//窗口是否关闭

grabber.stop();//停止抓取

grabber.close();

System.exit(2);//退出

}

canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像

Thread.sleep(10);//10毫秒刷新一次图像

}

}

}

2、摄像头小窗口加到JFrame

问题:grabber.grab()获取的图像格式是Frame,Frame之间是可以切换显示的。但是,其中一个不能加到另一种中进行显示(百度了好久也不能)。

解决思路:将grabber.grab()转为图片格式,然后在控件中显示图片。

grabber.grab()-->IplImage-->BufferedImage

如下是IplImage-->BufferedImage

public static BufferedImage iplToBufImgData(IplImage mat) {

if (mat.height() > 0 && mat.width() > 0) {

BufferedImage image = new BufferedImage(mat.width(), mat.height(),

BufferedImage.TYPE_3BYTE_BGR);

WritableRaster raster = image.getRaster();

DataBufferByte dataBuffer = (DataBufferByte) raster.getDataBuffer();

byte[] data = dataBuffer.getData();

mat.getByteBuffer().get(data);

BytePointer bytePointer =new BytePointer(data);

mat.imageData(bytePointer);

return image;

}

return null;

}

3、图片尺寸变化

实时视频的小窗口显示需要改变图片的大小。

ImageIcon image = new ImageIcon(bi);

image.setImage(image.getImage().getScaledInstance(470, 270,Image.SCALE_DEFAULT ));

GUIVideo.label.setIcon(image);//转换图像格式并输出

注:bi是BufferedImage的类对象。

java 摄像头 视频_javaCV-摄像头实时视频相关推荐

  1. java录制视频_javacv开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...

    javaCV系列文章: ' i# f% S' a# J9 X! w- g) wjavacv开发详解之1:调用本机摄像头视频 4 r' C, [4 ?' M7 Y; }javaCV开发详解之2:推流器实 ...

  2. ffmpeg java 播放视频_Javacv使用ffmpeg实现音视频同步播放

    最近用javaCV的ffmpeg包的FFmpegFrameGrabber帧捕捉器对捕捉到的音频帧和视频帧做了同步的播放.采用的同步方法是视频向音频同步. 具体的思路如下: (1)首先介绍ffmpeg是 ...

  3. JAVA使用摄像头录制_JavaCV开发详解之1:调用本机摄像头视频(建议使用javaCV最新版本)...

    引入依赖 org.bytedeco javacv 1.5.3 org.bytedeco javacv-platform 1.5.3 代码实现 package com.java.mmzsblog; im ...

  4. 远程实时读取海康威视4G网络摄像头视频

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 远程实时读取海康威视4G网络摄像头视频 ==有用的废话== 背景 ==重点== 步骤 总结 有用的废话 购买海康威视4G网络摄像头时, ...

  5. WEB页面播放大华摄像头视频解决方案

    目前在网页上播放大华摄像头视频,有如下2种途径: 1)首选获取摄像头的hls协议地址,H5可直接播放 2)获取摄像头rtsp协议地址,用ffmpeg转换成hls再播放 近期做的一个项目,需要在WEB端 ...

  6. Java对接海康摄像头坑点总结

    一.背景 有一批AI摄像头需要部署到客户方,需要实现的功能:1.摄像头实时预览,摄像头安装在不同地点的内网环境,因此需要通过frpc服务器做内网摄像头的代理:2.摄像头smart事件,进入区域.离开区 ...

  7. Android 手机采集摄像头视频 socket 视频传输实时传播

    这里搜集了两种实现Android 手机采集摄像头视频 socket 视频传输实时传播的方法,两种都可以使用. 第一种如下: 1.通过客户端socket请求,服务端接受到请求后,获取socket的输出流 ...

  8. python网络摄像头模拟usb摄像头_Python27+Opencv3 捕获网络摄像头IPCamera实时视频

    Opencv3+Python比较常见的是播放本地avi视频文件.或者捕获PC自带摄像头视频. 现在网络摄像机遍布,而我们测试时也需要用到网络摄像机的实时视频,并进行处理,参考<opencv3计算 ...

  9. Atititjs h5调用摄像头视频聊天 拍照功能 相机功能 录像attilax总结

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! Atit ...

最新文章

  1. 对象拷贝 Apache BeanUtils与Spring BeanUtils性能比较
  2. Linux下MySql数据库常用操作
  3. Fedora9中的gcc
  4. 【案例】护士发错药怎么处理?
  5. 02.并发编程(2)Thread类源码分析
  6. 计算机控制系统的试题,计算机控制系统练习题(1)
  7. 程序员分析报告(2018)-总结篇
  8. vue子组件触发祖先元素的执行的方法
  9. ndoejs中中间件的使用
  10. php安装redis扩展模块,[教程]为PHP安装phpRedis扩展模块
  11. 胡伟武计算机体系结构2版pdf_最新重大版重庆高中英语必修模块1/2/3/4课文听力单词录音MP3音频+电子课本PDF+课件+教案+试题...
  12. 基于docker搭开源iredmail邮箱服务器
  13. ssb门限_SSB调制
  14. ImportError: cannot import name ‘bbox_ious‘
  15. 3S处理技术 -MapGIS转换shp攻略
  16. WORD禁止自动更新域
  17. 应用QQ2440(s3c2440)ARM开发板驱动MMA7455加速度计的linux设备驱动编写
  18. Sentinel 集群限流设计原理
  19. 东方博宜OJ 1052 - 【入门】行李托运费
  20. 管家婆软件生产管理的简单方案

热门文章

  1. Android混淆那些事儿
  2. 淘宝按关键词搜索天猫商品接口调用展示
  3. K9s之Kubernetes集群管理交互工具实践
  4. AT24C02 能读不能写的问题
  5. Reducing the Number of Gray Levels, Zooming and Shrinking Images
  6. background-clip和background-origin
  7. 从Zero搭建一个属于自己的机房
  8. Android10源码下载与编译(Mac移动硬盘)
  9. 装机注意事项:一次装机差点翻车的经历
  10. 机器学习---sklearn