使用电脑摄像头识别二维码

要想摄像头识别二维码,需要两个基本功能:1、从摄像头获取图像,2、根据图片解析出二维码信息。在上一篇 java摄像头截图 已经实现了摄像头截图,只要再加上zxing(或其它能从图片中解析二维码的组件),就能从图像中解析出二维码,实现代码如下:

 1  package com.pengo.capture;
 2 
 3  import javax.swing.JFrame;
 4  import java.awt.BorderLayout;
 5  import java.awt.Dimension;
 6  import java.awt.Graphics2D;
 7  import java.awt.image.BufferedImage;
 8  import java.io.InputStream;
 9  import javax.media.MediaLocator;
10  import javax.swing.JPanel;
11  import javazoom.jl.player.Player;
12  import com.google.zxing.BinaryBitmap;
13  import com.google.zxing.LuminanceSource;
14  import com.google.zxing.MultiFormatReader;
15  import com.google.zxing.Result;
16  import com.google.zxing.common.HybridBinarizer;
17 
18  import net.sf.fmj.ui.application.CaptureDeviceBrowser;
19  import net.sf.fmj.ui.application.ContainerPlayer;
20  import net.sf.fmj.ui.application.PlayerPanelPrefs;
21  public  class CameraFrame2  extends JFrame{
22      private  static  int num = 0;
23      public CameraFrame2()  throws Exception{
24          this.setTitle("摄像头截图应用");
25          this.setSize(480, 500);
26          this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
27          final JPanel cameraPanel =  new JPanel();
28          this.getContentPane().setLayout( new BorderLayout());
29          this.getContentPane().add(cameraPanel, BorderLayout.CENTER);
30         ContainerPlayer containerPlayer =  new ContainerPlayer(cameraPanel);
31         MediaLocator locator = CaptureDeviceBrowser.run( null);    // 弹出摄像头设备选择
32 
33         PlayerPanelPrefs prefs =  new PlayerPanelPrefs();
34         containerPlayer.setMediaLocation(locator.toExternalForm(), prefs.autoPlay);
35         
36          new Thread() {
37              public  void run() {
38                  while ( true) {
39                      try {
40                         Thread.sleep(1000);
41                         Dimension imageSize = cameraPanel.getSize();
42                         BufferedImage image =  new BufferedImage(
43                                 imageSize.width, imageSize.height,
44                                 BufferedImage.TYPE_INT_ARGB);
45                         Graphics2D g = image.createGraphics();
46                         cameraPanel.paint(g);
47                         g.dispose();
48                         LuminanceSource source =  new BufferedImageLuminanceSource(
49                                 image);
50                         BinaryBitmap bitmap =  new BinaryBitmap(
51                                  new HybridBinarizer(source));
52                         Result result;
53                         result =  new MultiFormatReader().decode(bitmap);
54                         System.out.println("二维码====:" + result.getText());
55                         InputStream is = CameraFrame. class.getClassLoader().getResourceAsStream("resource/beep.mp3");
56                         Player player =  new Player(is);
57                         player.play();
58                     }  catch (Exception re) {
59                         re.printStackTrace();
60                     }
61                 }
62             }
63         }.start();
64     }
65     
66      public  static  void main(String[] args)  throws Exception{
67         CameraFrame2 camera =  new CameraFrame2();
68         camera.setVisible( true);
69     }
70 }

最后来张效果图(本图仅供参考)


要想识别效果好点,摄像头像素最好500W以上,
活动二维码签到、物品扫描,只需扛台手提,再加个高清摄像头就行了。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值