JAVA摄像头调用_实例---Win7

本文详细介绍了如何使用Java及JMF库实现摄像头调用,完成人脸识别登录功能。包括下载安装JMF、设置环境变量、注册摄像头、创建工程并运行等步骤。提供了简单明了的代码示例,方便读者快速理解并实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


分类: Java   665人阅读  评论(0)  收藏  举报

本人菜鸟级人物,由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.getDevice 为空指针。郁闷了一下午。现在终于搞出来了。特此纪念一下,因为在网上找了大半天,发现这方面的介绍不是很多,因此也希望能为后来的学习者有所帮助,少走些弯路。


功能:实现摄像头调用

步骤:1、到sun下载JMF,并且安装,安装后需重启电脑。下载链接http://www.oracle.com/technetwork/java/javase/download-142937.html

     2、创建设置JMF的环境变量,"计算机"->"系统属性"->"高级环境设置"->"高级"->"环境变量"

变量名:"JMFHOME"          变量值:"C:\Program Files\JMF2.1.1e"

变量名:"CLASSPATH"      变量值:";%JMFHOME%\lib\jmf.jar;%JMFHOME%\lib\sound.jar"

如图:

  3、打开安装好了的JMF,在C:\Program Files\JMF2.1.1e\bin目录下打开“jmfregistry.exe”,选择“Capture Devices” 然后按左下角“Detect Capture Devices”按钮,多按几次,直到左边栏中出现“ vfw:Microsoft WDM Image Capture (Win32):0” ,则说明JMF已经注册了摄像头,到此就可以关闭了。

如图:

4、现在可以用Eclipse 编程了。创建一个工程,把下面样例代码复制进去,在该工程点击右键选择Build Path ->Configure Build Path... ->Libraries ->Add External JARs... 然后把安装的JMF里面\lib目录下的几个Jar包导入进来。

如图:


5、运行即可。

[java]  view plain copy
  1. import java.awt.BorderLayout;  
  2. import java.awt.Component;  
  3. import javax.media.CaptureDeviceInfo;  
  4. import javax.media.Manager;  
  5. import javax.media.MediaLocator;  
  6. import javax.media.Player;  
  7. import javax.media.cdm.CaptureDeviceManager;  
  8. import javax.swing.JFrame;  
  9. import javax.swing.JPanel;  
  10. public class Test extends JFrame{  
  11.     public  static Player player = null;  
  12.     private CaptureDeviceInfo deviceInfo = null;  
  13.     private MediaLocator mediaLocator = null;  
  14.     private Component component = null;  
  15.     private JPanel vedioPanel = null;  
  16.       
  17.     String   str1   =   "vfw:Logitech   USB   Video   Camera:0";      //获取USB摄像头的字符串  
  18.     String   str2   =   "vfw:Microsoft WDM Image Capture (Win32):0";    //获取本地摄像头的字符串  
  19.     // Creates a new instance of CameraTest   
  20.     public Test() {  
  21.         init();  
  22.     }  
  23.     public void init(){  
  24.         deviceInfo = CaptureDeviceManager.getDevice(str2);  //根据字符串获取采集设备(摄像头)的引用  
  25.      //   System.out.println(deviceInfo);         //显示采集设备(摄像头)的信息  
  26.      //   System.out.println(deviceInfo.getName());     //显示采集设备(摄像头)的设备名称  
  27.         mediaLocator = deviceInfo.getLocator(); //获取采集设备的定位器的引用,需要根据此引用来创建视频播放器  
  28.           
  29.         try{  
  30.             player = Manager.createRealizedPlayer(mediaLocator);// 利用mediaLocator 获取一个player  
  31.             component = player.getVisualComponent();  
  32.             if (component != null){  
  33.                 vedioPanel = new JPanel();  
  34.                 vedioPanel.add(component, BorderLayout.NORTH);  
  35.                 this.add(vedioPanel);  
  36.                 this.pack();    // 自动分配窗体大小  
  37.                 this.setResizable(false);  
  38.                 this.setDefaultCloseOperation(EXIT_ON_CLOSE);  
  39.                 this.setVisible(true);  
  40.                 player.start();  
  41.             }  
  42.         }catch(Exception e){  
  43.             e.printStackTrace();  
  44.         }  
  45.     }  
  46.       
  47.     public static void main(String[] args) {  
  48.         new Test();  
  49.     }  
  50. }  

首先到sun下载最新的jmf,然后安装。 

  然后,说一下需求 

  1.   用摄像头拍照 

  2.   在文本框输入文件名 

  3.   按下拍照按钮,获取摄像头内的图像 

  4.   在拍下的照片上有一红框截取固定大小的照片。 

  5.   保存为本地图像为jpg格式,不得压缩画质 

  技术关键,相信也是大家最感兴趣的部分也就是如何让一个摄像头工作,并拍下一张照片了。 

  利用jmf,代码很简单: 

//利用这三个类分别获取摄像头驱动,和获取摄像头内的图像流,获取到的图像流是一个swing的component组件类 

Java代码   收藏代码
  1. public   static   player   player   =   null;   
  2. private   capturedeviceinfo   di   =   null;   
  3. private   medialocator   ml   =   null;   

//文档中提供的驱动写法,为何这么写我也不知:) 

Java代码   收藏代码
  1. string   str1   =   "vfw:logitech   usb   video   camera:0 ";   
  2. string   str2   =   "vfw:microsoft   wdm   image   capture   (win32):0 ";     
  3. di   =   capturedevicemanager.getdevice(str2);   
  4. ml   =   di.getlocator();   
  5. try   
  6. {   
  7.  player   =   manager.createrealizedplayer(ml);   
  8.  player.start();   
  9.  component   comp;   
  10.  if   ((comp   =   player.getvisualcomponent())   !=   null)   
  11.  {   
  12.   add(comp,   borderlayout.north);   
  13.  }   
  14. }   
  15. catch   (exception   e)   
  16. {   
  17.  e.printstacktrace();   
  18. }     

  接下来就是点击拍照,获取摄像头内的当前图像。 

  代码也是很简单: 

Java代码   收藏代码
  1. private   jbutton   capture;   
  2. private   buffer   buf   =   null;   
  3. private   buffertoimage   btoi   =   null;   
  4. private   imagepanel   imgpanel   =   null;   
  5. private   image   img   =   null;   
  6. private   imagepanel   imgpanel   =   null;   
  7.   
  8. jcomponent   c   =   (jcomponent)   e.getsource();   
  9. if   (c   ==   capture)//如果按下的是拍照按钮     
  10. {     
  11.  framegrabbingcontrol   fgc   =(framegrabbingcontrol)    player.getcontrol( "javax.media.control.framegrabbingcontrol ");   
  12.  buf   =   fgc.grabframe();   //   获取当前祯并存入buffer类   
  13.  btoi   =   new   buffertoimage((videoformat)   buf.getformat());   
  14.  img   =   btoi.createimage(buf);   //   show   the   image     
  15.  imgpanel.setimage(img);   
  16. }     

  保存图像的就不多说了,以下为示例代码 

Java代码   收藏代码
  1. bufferedimage   bi   =   (bufferedimage)   createimage(imgwidth,   imgheight);   
  2. graphics2d   g2   =   bi.creategraphics();   
  3. g2.drawimage(img,   null,   null);   
  4. fileoutputstream   out   =   null;   
  5. try   
  6. {   
  7.  out   =   new   fileoutputstream(s);   
  8. }   
  9. catch   (java.io.filenotfoundexception   io)   
  10. {   
  11.  system.out.println( "file   not   found ");   
  12. }   
  13.   
  14. jpegimageencoder   encoder   =   jpegcodec.createjpegencoder(out);   
  15. jpegencodeparam   param   =   encoder.getdefaultjpegencodeparam(bi);   
  16. param.setquality(1f,   false);//不压缩图像   
  17. encoder.setjpegencodeparam(param);   
  18. try   
  19. {   
  20.  encoder.encode(bi);   
  21.  out.close();   
  22. }   
  23. catch   (java.io.ioexception   io)   
  24. {   
  25.  system.out.println( "ioexception ");   
  26. }  
把.jar文件导入。下载了jmf后需要安装,安装后你的那个jmf目录下就会有一个lib文件夹里面有.jar文件,然后打开eclipse,右键选择你的工程-〉属性-〉java   build   path-> library-〉add   external   jars   找到你的jmf目录下lib的那个文件夹然后选中那些文件导入就ok了。 
然后利用工具提供的导入文件帮助,一个一个导就OK了

http://map.ipviking.com/


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值