javacv开发详解之1:调用本机摄像头视频(建议使用javaCV1.3版本)

来源:互联网 发布:电子图书数据库 编辑:程序博客网 时间:2024/06/01 18:55

转自:http://blog.csdn.net/eguid_1/article/details/51659578


前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用来演示一下javacv的基础功能

重要:

建议使用最新javaCV1.3版本,该版本已解决更早版本中已发现的大部分bug

javacv系列文章使用6个jar包:

javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系统平台.jar,OpenCV.jar,opencv-系统平台.jar。

其中ffmpeg-系统平台.jar,opencv-系统平台.jar中的系统平台根据开发环境或者测试部署环境自行更改为对应的jar包,比如windows7 64位系统替换为ffmpeg-x86-x64.jar

为什么要这样做:因为ffmpeg-系统平台.jar中存放的是c/c++本地so/dll库,而ffmpeg.jar就是使用javacpp封装的对应本地库Java接口的实现,而javacpp就是基于jni的一个功能性封装包,方便实现jni,javacv.jar就是对9个视觉库进行了二次封装,但是实现的功能有限,所以建议新手先熟悉openCV和ffmpeg这两个C/C++库的API后再来看javaCV思路就会很清晰了。

须知:
javacv系列文章默认音视频处理使用ffmpeg,图像处理使用opencv,摄像头抓取使用opencv

javaCV1.3版本下载:

1、javacv1.3核心包:http://download.csdn.net/detail/eguid_1/9716960(包含javacv.jar,javacpp.jar和javacv-platform.jar)

2、javacv1.3-opencv包集合:http://download.csdn.net/detail/eguid_1/9716965

3、javacv1.3-ffmpeg包集合:http://download.csdn.net/detail/eguid_1/9719323

javaCV1.3所有jar包集合:http://download.csdn.net/detail/eguid_1/9719343
javaCV1.2所有jar包集合在这里下载:http://download.csdn.net/album/detail/3171

1、使用最新的javacv1.3

(注意:从其他地方下载的依赖包请积极开心的替换为官方jar包和博主提供jar包;如果使用其他jar包版本而导致出错,不要急着找博主问为啥会报错,先把jar包替换了再试试看)

以下部分为javacv1.2版本,不再建议下载

基础依赖包:javacv.jar;javacpp.jar(必须是1.2以上版本)

windows x64平台用到的opencv依赖:opencv.jaroepncv-windows-x86_64.jar(其他平台替换为对应的jar包即可)。

补充:

1、如果是苹果mac系统,把oepncv-windows-x86_64.jar替换成这个包opencv-macosx-x86_64.jar
2、Linux平台替换成这个包:opencv-linux-x86_64.jar  

3、安卓平台替换成opencv-android-arm.jar  或者opencv-android-x86.jar 

2、为什么不需要安装opencv?

从javacv0.8开始,已经不需要本地安装opencv,直接通过引用opencv对应的系统平台的引用包即可。

(比如oepncv-windows-x86_64.jar就是典型的64位windows环境依赖包)

3、java通过javacv获取windows的摄像头视频

最终调用的摄像头实时视频:


代码只有那么多:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. /** 
  2.  * 文件名:javavcCameraTest.java 
  3.  * 描述:调用windows平台的摄像头窗口视频 
  4.  * 修改时间:2016年6月13日 
  5.  * 修改内容: 
  6.  */  
  7. package cc.eguid.javacv;  
  8.   
  9. import javax.swing.JFrame;  
  10.   
  11. import org.bytedeco.javacv.CanvasFrame;  
  12. import org.bytedeco.javacv.OpenCVFrameConverter;  
  13. import org.bytedeco.javacv.FrameGrabber.Exception;  
  14. import org.bytedeco.javacv.OpenCVFrameGrabber;  
  15.   
  16. /** 
  17.  * 调用本地摄像头窗口视频 
  18.  * @author eguid   
  19.  * @version 2016年6月13日   
  20.  * @see javavcCameraTest   
  21.  * @since  javacv1.2 
  22.  */  
  23.   
  24. public class JavavcCameraTest  
  25. {  
  26. public static void main(String[] args) throws Exception, InterruptedException  
  27. {  
  28.     OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);    
  29.     grabber.start();   //开始获取摄像头数据  
  30.     CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口  
  31.     canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  32.     canvas.setAlwaysOnTop(true);  
  33.       
  34.     while(true)  
  35.     {  
  36.         if(!canvas.isDisplayable())  
  37.         {//窗口是否关闭  
  38.             grabber.stop();//停止抓取  
  39.             System.exit(2);//退出  
  40.         }  
  41.         canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像  
  42.   
  43.         Thread.sleep(50);//50毫秒刷新一次图像  
  44.     }  
  45. }  
  46. }  


是不是很简单,原本很复杂的流媒体操作,javaCV能够帮助我们快速实现;
而使用c/c++要几百行才能实现同样的功能(夸张了点 - -)
转子

前言:javacv开发包是用于支持java多媒体开发的一套开发包,可以适用于本地多媒体(音视频)调用以及音视频,图片等文件后期操作(图片修改,音视频解码剪辑等等功能),这里只使用最简单的本地摄像头调用来演示一下javacv的基础功能

重要:

建议使用最新javaCV1.3版本,该版本已解决更早版本中已发现的大部分bug

javacv系列文章使用6个jar包:

javacv.jar,javacpp.jar,ffmpeg.jar,ffmpeg-系统平台.jar,OpenCV.jar,opencv-系统平台.jar。

其中ffmpeg-系统平台.jar,opencv-系统平台.jar中的系统平台根据开发环境或者测试部署环境自行更改为对应的jar包,比如windows7 64位系统替换为ffmpeg-x86-x64.jar

为什么要这样做:因为ffmpeg-系统平台.jar中存放的是c/c++本地so/dll库,而ffmpeg.jar就是使用javacpp封装的对应本地库Java接口的实现,而javacpp就是基于jni的一个功能性封装包,方便实现jni,javacv.jar就是对9个视觉库进行了二次封装,但是实现的功能有限,所以建议新手先熟悉openCV和ffmpeg这两个C/C++库的API后再来看javaCV思路就会很清晰了。

须知:
javacv系列文章默认音视频处理使用ffmpeg,图像处理使用opencv,摄像头抓取使用opencv

javaCV1.3版本下载:

1、javacv1.3核心包:http://download.csdn.net/detail/eguid_1/9716960(包含javacv.jar,javacpp.jar和javacv-platform.jar)

2、javacv1.3-opencv包集合:http://download.csdn.net/detail/eguid_1/9716965

3、javacv1.3-ffmpeg包集合:http://download.csdn.net/detail/eguid_1/9719323

javaCV1.3所有jar包集合:http://download.csdn.net/detail/eguid_1/9719343
javaCV1.2所有jar包集合在这里下载:http://download.csdn.net/album/detail/3171

1、使用最新的javacv1.3

(注意:从其他地方下载的依赖包请积极开心的替换为官方jar包和博主提供jar包;如果使用其他jar包版本而导致出错,不要急着找博主问为啥会报错,先把jar包替换了再试试看)

以下部分为javacv1.2版本,不再建议下载

基础依赖包:javacv.jar;javacpp.jar(必须是1.2以上版本)

windows x64平台用到的opencv依赖:opencv.jaroepncv-windows-x86_64.jar(其他平台替换为对应的jar包即可)。

补充:

1、如果是苹果mac系统,把oepncv-windows-x86_64.jar替换成这个包opencv-macosx-x86_64.jar

2、Linux平台替换成这个包:opencv-linux-x86_64.jar  

3、安卓平台替换成opencv-android-arm.jar  或者opencv-android-x86.jar 

2、为什么不需要安装opencv?

从javacv0.8开始,已经不需要本地安装opencv,直接通过引用opencv对应的系统平台的引用包即可。

(比如oepncv-windows-x86_64.jar就是典型的64位windows环境依赖包)

3、java通过javacv获取windows的摄像头视频

最终调用的摄像头实时视频:

代码只有那么多:

[java] view plain copy
 print?在CODE上查看代码片派生到我的代码片

      1. /** 
      2.  * 文件名:javavcCameraTest.java 
      3.  * 描述:调用windows平台的摄像头窗口视频 
      4.  * 修改时间:2016年6月13日 
      5.  * 修改内容: 
      6.  */  
      7. package cc.eguid.javacv;  
      8.   
      9. import javax.swing.JFrame;  
      10.   
      11. import org.bytedeco.javacv.CanvasFrame;  
      12. import org.bytedeco.javacv.OpenCVFrameConverter;  
      13. import org.bytedeco.javacv.FrameGrabber.Exception;  
      14. import org.bytedeco.javacv.OpenCVFrameGrabber;  
      15.   
      16. /** 
      17.  * 调用本地摄像头窗口视频 
      18.  * @author eguid   
      19.  * @version 2016年6月13日   
      20.  * @see javavcCameraTest   
      21.  * @since  javacv1.2 
      22.  */  
      23.   
      24. public class JavavcCameraTest  
      25. {  
      26. public static void main(String[] args) throws Exception, InterruptedException  
      27. {  
      28.     OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);    
      29.     grabber.start();   //开始获取摄像头数据  
      30.     CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口  
      31.     canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
      32.     canvas.setAlwaysOnTop(true);  
      33.       
      34.     while(true)  
      35.     {  
      36.         if(!canvas.isDisplayable())  
      37.         {//窗口是否关闭  
      38.             grabber.stop();//停止抓取  
      39.             System.exit(2);//退出  
      40.         }  
      41.         canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像  
      42.   
      43.         Thread.sleep(50);//50毫秒刷新一次图像  
      44.     }  
      45. }  
      46. }  


是不是很简单,原本很复杂的流媒体操作,javaCV能够帮助我们快速实现;
而使用c/c++要几百行才能实现同样的功能(夸张了点 - -)
0 0
原创粉丝点击