http://blog.csdn.net/xing_sky/article/details/43482213
原文地址:http://blog.csdn.net/zajin/article/details/9288239
本人菜鸟级人物,由于要搞个人脸识别登录(JAVACV),百度谷歌了一下午,找了网上简单的样例代码来试,可是老是调试不过,出现CaptureDeviceManager.getDevice 为空指针。郁闷了一下午。现在终于搞出来了。特此纪念一下,因为在网上找了大半天,发现这方面的介绍不是很多,因此也希望能为后来的学习者有所帮助,少走些弯路。
功能:实现摄像头调用
步骤:1、到sun下载JMF,并且安装,安装后需重启电脑。下载链接http://www.oracle.com/technetwork/java/javase/download-142937.html
2、创建设置JMF的环境变量,"计算机"->"系统属性"->"高级环境设置"->"高级"->"环境变量"
变量名:"JMFHOME" 变量值:"C:Program FilesJMF2.1.1e"
变量名:"CLASSPATH" 变量值:";%JMFHOME%libjmf.jar;%JMFHOME%libsound.jar"
如图:
3、打开安装好了的JMF,在C:Program FilesJMF2.1.1ein目录下打开“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、运行即可。
import java.awt.BorderLayout; import java.awt.Component; import javax.media.CaptureDeviceInfo; import javax.media.Manager; import javax.media.MediaLocator; import javax.media.Player; import javax.media.cdm.CaptureDeviceManager; import javax.swing.JFrame; import javax.swing.JPanel; public class Test extends JFrame{ public static Player player = null; private CaptureDeviceInfo deviceInfo = null; private MediaLocator mediaLocator = null; private Component component = null; private JPanel vedioPanel = null; String str1 = "vfw:Logitech USB Video Camera:0"; //获取USB摄像头的字符串 String str2 = "vfw:Microsoft WDM Image Capture (Win32):0"; //获取本地摄像头的字符串 // Creates a new instance of CameraTest public Test() { init(); } public void init(){ deviceInfo = CaptureDeviceManager.getDevice(str2); //根据字符串获取采集设备(摄像头)的引用 // System.out.println(deviceInfo); //显示采集设备(摄像头)的信息 // System.out.println(deviceInfo.getName()); //显示采集设备(摄像头)的设备名称 mediaLocator = deviceInfo.getLocator(); //获取采集设备的定位器的引用,需要根据此引用来创建视频播放器 try{ player = Manager.createRealizedPlayer(mediaLocator);// 利用mediaLocator 获取一个player component = player.getVisualComponent(); if (component != null){ vedioPanel = new JPanel(); vedioPanel.add(component, BorderLayout.NORTH); this.add(vedioPanel); this.pack(); // 自动分配窗体大小 this.setResizable(false); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); player.start(); } }catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args) { new Test(); } }