使用JavaCV/OpenCV抓取并存储摄像头图像
http://blog.csdn.net/ljsspace/article/details/6702178

版权声明:本文为博主原创文章,未经博主允许不得转载。
本程序通过JFrame实时显示本机摄像头图像,并将图像存储到一个缓冲区,当用户用鼠标点击JFrame中任何区域时,显示抓取图像的简单动画,同时保存缓冲区的图像到磁盘文件中。点击JFrame关闭按钮可以退出程序。
实现:
- import java.awt.Graphics2D;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.MouseAdapter;
- import java.awt.event.MouseEvent;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.IOException;
- import javax.imageio.ImageIO;
- import javax.swing.Timer;
- import com.googlecode.javacv.CanvasFrame;
- import com.googlecode.javacv.OpenCVFrameGrabber;
- import com.googlecode.javacv.cpp.opencv_core.IplImage;
- import static com.googlecode.javacv.cpp.opencv_core.cvReleaseImage;
- /**
- *
- * Use JavaCV/OpenCV to capture camera images
- *
- * There are two functions in this demo:
- * 1) show real-time camera images
- * 2) capture camera images by mouse-clicking anywhere in the JFrame,
- * the jpg file is saved in a hard-coded path.
- *
- * @author ljs
- * 2011-08-19
- *
- */
- public class CameraCapture {
- public static String savedImageFile = "c:\\tmp\\my.jpg";
- //timer for image capture animation
- static class TimerAction implements ActionListener {
- private Graphics2D g;
- private CanvasFrame canvasFrame;
- private int width,height;
- private int delta=10;
- private int count = 0;
- private Timer timer;
- public void setTimer(Timer timer){
- this.timer = timer;
- }
- public TimerAction(CanvasFrame canvasFrame){
- this.g = (Graphics2D)canvasFrame.getCanvas().getGraphics();
- this.canvasFrame = canvasFrame;
- this.width = canvasFrame.getCanvas().getWidth();
- this.height = canvasFrame.getCanvas().getHeight();
- }
- public void actionPerformed(ActionEvent e) {
- int offset = delta*count;
- if(width-offset>=offset && height-offset >= offset) {
- g.drawRect(offset, offset, width-2*offset, height-2*offset);
- canvasFrame.repaint();
- count++;
- }else{
- //when animation is done, reset count and stop timer.
- timer.stop();
- count = 0;
- }
- }
- }
- public static void main(String[] args) throws Exception {
- //open camera source
- OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
- grabber.start();
- //create a frame for real-time image display
- CanvasFrame canvasFrame = new CanvasFrame("Camera");
- IplImage image = grabber.grab();
- int width = image.width();
- int height = image.height();
- canvasFrame.setCanvasSize(width, height);
- //onscreen buffer for image capture
- final BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
- Graphics2D bGraphics = bImage.createGraphics();
- //animation timer
- TimerAction timerAction = new TimerAction(canvasFrame);
- final Timer timer=new Timer(10, timerAction);
- timerAction.setTimer(timer);
- //click the frame to capture an image
- canvasFrame.getCanvas().addMouseListener(new MouseAdapter(){
- public void mouseClicked(MouseEvent e){
- timer.start(); //start animation
- try {
- ImageIO.write(bImage, "jpg", new File(savedImageFile));
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- //real-time image display
- while(canvasFrame.isVisible() && (image=grabber.grab()) != null){
- if(!timer.isRunning()) { //when animation is on, pause real-time display
- canvasFrame.showImage(image);
- //draw the onscreen image simutaneously
- bGraphics.drawImage(image.getBufferedImage(),null,0,0);
- }
- }
- //release resources
- cvReleaseImage(image);
- grabber.stop();
- canvasFrame.dispose();
- }
- }
使用JavaCV/OpenCV抓取并存储摄像头图像的更多相关文章
- 摄像头脸部识别 (1)opencv 抓取视频数据并保存
摄像头脸部识别 (1)opencv 抓取视频数据并保存 基于python 和 opencv 3.4.0 (兼容 opencv 2.X 参考注释),详细如代码 import numpy as np im ...
- 在python3下使用OpenCV 抓取摄像头图像并实时显示3色直方图
以下代码为在Python3环境下利用OpenCV 抓取摄像头的实时图像, 通过OpenCV的 calHist函数计算直方图, 并显示在3个不同窗口中. import cv2 import numpy ...
- 【Python入门只需20分钟】从安装到数据抓取、存储原来这么简单
基于大众对Python的大肆吹捧和赞赏,作为一名Java从业人员,我本着批判与好奇的心态买了本python方面的书<毫无障碍学Python>.仅仅看了书前面一小部分的我......决定做一 ...
- 在python3下使用OpenCV 抓取摄像头图像提取蓝色
工作中需要对摄像头进行调试, Python平台大大提高调试效率. 从网找到段代码, 可以从摄像头图像中抠出蓝色. import cv2 import numpy as np cap = cv2.Vi ...
- OSX下面用ffmpeg抓取桌面以及摄像头推流进行直播
参考博客 http://blog.chinaunix.net/uid-11344913-id-4665455.html 在osx系统下通过ffmpeg查看设备 ffmpeg -f avfoundati ...
- Python 抓取数据存储到Redis中
redis是一个key-value存储结构.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted set ...
- 用ADB 抓取和存储APP日志方法
前置条件:电脑已经安装好adb (一) 进入adb目录下连接手机,检测出手机 CD 到SDK的platform-tools (二)adb logcat-c 清除日志 (三)adb logcat ...
- Python 抓取数据存储到Mysql中
# -*- coding: utf-8 -*- import os,sys import requests import bs4 import pymysql#import MySQLdb #连接MY ...
- Zeta--S3 Linux抓取一帧YUV图像后使用硬件编码器编码成H.264
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <getopt.h&g ...
随机推荐
- javacript参数传递表单验证
<!doctype html> <html> <head> <meta charset="utf-8"> <style typ ...
- 第四题 (List)写一个函数reverseList,该函数能够接受一个List,然后把该List 倒序排列。 例如: List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(“Learn”); //此时list 为Hello World Learn r
package zuoye; import java.util.ArrayList; import java.util.List; public class Reverse01 { public st ...
- iOSNSDate的相关操作
//获取当前时间 时间根据格林威治时间显示 //时间 8小时 英国格林威治 7小时 NSDate *date = [NSDate date]; NSLog(@"%@",date ...
- 矩阵快速幂——将运算推广到矩阵上HDU 1575
/* 本题的思路比较简单,就是将递推公式写出来,然后表达成为一个矩阵的形式 最后通过计算就可以得到一个符合题目要求的矩阵, 然后就是将矩阵上面所有的对角线元素相加 得到的结果即为所求的目标 */ #i ...
- svn回滚
有时会因为某些原因会错误提交某些文件: 1,官方版本库升级,自己的库代码也要跟着升级,但发现使用官方代码后有问题,代码需要回滚到可用的版本: 2,拷贝一个项目的代码到另外一个项目,把整个代码目录也拷贝 ...
- Inno Setup入门(十二)——Pascal脚本(1)
事件函数(1) Inno Setup支持以下函数和过程. function InitializeSetup(): Boolean; 该函数在安装程序初始化时调用,返回False 将中断安装,True则 ...
- think in uml 2.1
业务建模
- iOS中的多线程基础
NSThread NSThread是一个苹果封装过的,面向对象的线程对象.但是它的生命周期需要我们自己来手动管理,所以使用不是很常见,比如[NSThread currentThread],它可以获取当 ...
- 【多重背包】 poj 2392
转自:http://blog.csdn.net/wangjian8006 题目大意:有一头奶牛要上太空,他有很多种石头,每种石头的高度是hi,但是不能放到ai之上的高度,并且这种石头有ci个将这些石头 ...
- Linux下安装php开发框架yaf
yaf框架中文手册:http://yaf.laruence.com/manual/index.html yaf手册:http://www.php.net/manual/en/book.yaf.php ...