http://blog.csdn.net/ljsspace/article/details/6702178

 分类:
图形图像(3) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

本程序通过JFrame实时显示本机摄像头图像,并将图像存储到一个缓冲区,当用户用鼠标点击JFrame中任何区域时,显示抓取图像的简单动画,同时保存缓冲区的图像到磁盘文件中。点击JFrame关闭按钮可以退出程序。

实现:

  1. import java.awt.Graphics2D;
  2. import java.awt.event.ActionEvent;
  3. import java.awt.event.ActionListener;
  4. import java.awt.event.MouseAdapter;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.image.BufferedImage;
  7. import java.io.File;
  8. import java.io.IOException;
  9. import javax.imageio.ImageIO;
  10. import javax.swing.Timer;
  11. import com.googlecode.javacv.CanvasFrame;
  12. import com.googlecode.javacv.OpenCVFrameGrabber;
  13. import com.googlecode.javacv.cpp.opencv_core.IplImage;
  14. import static com.googlecode.javacv.cpp.opencv_core.cvReleaseImage;
  15. /**
  16. *
  17. * Use JavaCV/OpenCV to capture camera images
  18. *
  19. * There are two functions in this demo:
  20. * 1) show real-time camera images
  21. * 2) capture camera images by mouse-clicking anywhere in the JFrame,
  22. * the jpg file is saved in a hard-coded path.
  23. *
  24. * @author ljs
  25. * 2011-08-19
  26. *
  27. */
  28. public class CameraCapture {
  29. public static String savedImageFile = "c:\\tmp\\my.jpg";
  30. //timer for image capture animation
  31. static class TimerAction implements ActionListener {
  32. private Graphics2D g;
  33. private CanvasFrame canvasFrame;
  34. private int width,height;
  35. private int delta=10;
  36. private int count = 0;
  37. private Timer timer;
  38. public void setTimer(Timer timer){
  39. this.timer = timer;
  40. }
  41. public TimerAction(CanvasFrame canvasFrame){
  42. this.g = (Graphics2D)canvasFrame.getCanvas().getGraphics();
  43. this.canvasFrame = canvasFrame;
  44. this.width = canvasFrame.getCanvas().getWidth();
  45. this.height = canvasFrame.getCanvas().getHeight();
  46. }
  47. public void actionPerformed(ActionEvent e) {
  48. int offset = delta*count;
  49. if(width-offset>=offset && height-offset >= offset) {
  50. g.drawRect(offset, offset, width-2*offset, height-2*offset);
  51. canvasFrame.repaint();
  52. count++;
  53. }else{
  54. //when animation is done, reset count and stop timer.
  55. timer.stop();
  56. count = 0;
  57. }
  58. }
  59. }
  60. public static void main(String[] args) throws Exception {
  61. //open camera source
  62. OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
  63. grabber.start();
  64. //create a frame for real-time image display
  65. CanvasFrame canvasFrame = new CanvasFrame("Camera");
  66. IplImage image = grabber.grab();
  67. int width = image.width();
  68. int height = image.height();
  69. canvasFrame.setCanvasSize(width, height);
  70. //onscreen buffer for image capture
  71. final BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
  72. Graphics2D bGraphics = bImage.createGraphics();
  73. //animation timer
  74. TimerAction timerAction = new TimerAction(canvasFrame);
  75. final Timer timer=new Timer(10, timerAction);
  76. timerAction.setTimer(timer);
  77. //click the frame to capture an image
  78. canvasFrame.getCanvas().addMouseListener(new MouseAdapter(){
  79. public void mouseClicked(MouseEvent e){
  80. timer.start(); //start animation
  81. try {
  82. ImageIO.write(bImage, "jpg", new File(savedImageFile));
  83. } catch (IOException e1) {
  84. e1.printStackTrace();
  85. }
  86. }
  87. });
  88. //real-time image display
  89. while(canvasFrame.isVisible() && (image=grabber.grab()) != null){
  90. if(!timer.isRunning()) { //when animation is on, pause real-time display
  91. canvasFrame.showImage(image);
  92. //draw the onscreen image simutaneously
  93. bGraphics.drawImage(image.getBufferedImage(),null,0,0);
  94. }
  95. }
  96. //release resources
  97. cvReleaseImage(image);
  98. grabber.stop();
  99. canvasFrame.dispose();
  100. }
  101. }

使用JavaCV/OpenCV抓取并存储摄像头图像的更多相关文章

  1. 摄像头脸部识别 (1)opencv 抓取视频数据并保存

    摄像头脸部识别 (1)opencv 抓取视频数据并保存 基于python 和 opencv 3.4.0 (兼容 opencv 2.X 参考注释),详细如代码 import numpy as np im ...

  2. 在python3下使用OpenCV 抓取摄像头图像并实时显示3色直方图

    以下代码为在Python3环境下利用OpenCV 抓取摄像头的实时图像, 通过OpenCV的 calHist函数计算直方图, 并显示在3个不同窗口中. import cv2 import numpy ...

  3. 【Python入门只需20分钟】从安装到数据抓取、存储原来这么简单

    基于大众对Python的大肆吹捧和赞赏,作为一名Java从业人员,我本着批判与好奇的心态买了本python方面的书<毫无障碍学Python>.仅仅看了书前面一小部分的我......决定做一 ...

  4. 在python3下使用OpenCV 抓取摄像头图像提取蓝色

    工作中需要对摄像头进行调试, Python平台大大提高调试效率. 从网找到段代码, 可以从摄像头图像中抠出蓝色. import cv2 import numpy as np cap  = cv2.Vi ...

  5. OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播

    参考博客 http://blog.chinaunix.net/uid-11344913-id-4665455.html 在osx系统下通过ffmpeg查看设备 ffmpeg -f avfoundati ...

  6. Python 抓取数据存储到Redis中

    redis是一个key-value存储结构.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...

  7. 用ADB 抓取和存储APP日志方法

    前置条件:电脑已经安装好adb (一)  进入adb目录下连接手机,检测出手机 CD 到SDK的platform-tools (二)adb logcat-c  清除日志  (三)adb  logcat ...

  8. Python 抓取数据存储到Mysql中

    # -*- coding: utf-8 -*- import os,sys import requests import bs4 import pymysql#import MySQLdb #连接MY ...

  9. Zeta--S3 Linux抓取一帧YUV图像后使用硬件编码器编码成H.264

    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h&g ...

随机推荐

  1. Pivot Index--Google

    Return the pivot index of the given array of numbers. The pivot index is the index where the sum of ...

  2. Xib学习之(1)

    刚学xib就遇到一个问题 最后还是朋友帮忙解决了 就是在设置约束时,设置的是左右约束为0,可是最后弄出来却是左右边界都空出来了16 解决办法: 具体原因应该是iOS8 之后UIView又多了个属性:l ...

  3. call ,apply 和 bind的用法与区别

    作用都是一样的,官方解释:"调用一个对象的一个方法,以另一个对象替换当前对象", 简单来说就是改变当前使用该方法的对象中的this指向: var xw = { name : &qu ...

  4. ios 基础数据类型

    1:NSString http://blog.csdn.net/likendsl/article/details/7417878 http://xys289187120.blog.51cto.com/ ...

  5. VMWare桥接、NAT和only-host三种模式

    如果你想利用VMWare安装虚拟机,或想创建一个与网内其他机器相隔离的虚拟系统,进行特殊的调试工作.此时,对虚拟系统网络连接模式的选择就非常重要了.如果你选择的工作模式不正确,就无法实现上述目的,也就 ...

  6. Storm官方帮助手册翻译(上)

    Storm作为当前最流行的实时计算框架,自Twitter将其开源后就一直备受关注.由于其具有先天的稳定性以及便捷性,目前被许多大公司所采用,国外像雅虎.雅虎日本.Twitter.OOYALA.Spot ...

  7. 安卓四大组件的作用、安卓Service的作用

    Activity好像是应用程式的眼睛,提供与user互动之窗. BroadcastReceiver好像是耳朵,接收来自各方的Intent. Service是在后台运行的. 一个Service 是一段长 ...

  8. linux sigaction信号处理

    sigaction函数相比signal函数更为复杂,但更具灵活性,下面具体介绍她的结构和用法: #include <signal.h> int sigaction(int signum, ...

  9. Toolbar Painter 工具条制作

    工具条制作工具(ToolBarPainter2013.exe),专为程序猿设计,界面开发必备.当用VC编程制作工具条时,需要为工具栏上每一个button添加图标,是一件极其繁琐的事情,该工具可利用已有 ...

  10. String 转Map(基于Guava类库)

    字符串格式:key1=value1&key2=value2...... java代码 Map<String,String> targetOrderObj = Splitter.on ...