全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解使用JavaCV/OpenCV抓取并存储摄像头图像

本程序通过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  # java  # opencv  # 读取图片  # javacv  # JavaCV 本地视频推流实现依赖示例  # javaCV视频处理之提取人像视频  # 不到十行实现javaCV图片OCR文字识别  # JavaCV获取视频文件时长的方法  # JavaCV实现获取视频每帧并保存  # javacv视频抽帧的实现过程详解(附代码)  # JavaCV 拉流存储到本地示例解析  # 并将  # 本机  # 大家多多  # 用鼠标  # real  # show  # demo  # time  # jpg  # clicking  # mouse  # functions 


相关文章: c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  如何构建满足综合性能需求的优质建站方案?  TestNG的testng.xml配置文件怎么写  如何在Golang中使用replace替换模块_指定本地或远程路径  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  已有域名和空间如何快速搭建网站?  如何快速重置建站主机并恢复默认配置?  山东云建站价格为何差异显著?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  个人摄影网站制作流程,摄影爱好者都去什么网站?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  C++如何使用std::optional?(处理可选值)  网站专业制作公司有哪些,做一个公司网站要多少钱?  大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?  如何快速搭建高效可靠的建站解决方案?  如何高效配置IIS服务器搭建网站?  高端云建站费用究竟需要多少预算?  如何在IIS7上新建站点并设置安全权限?  建站主机功能解析:服务器选择与快速搭建指南  如何在建站之星网店版论坛获取技术支持?  html制作网站的步骤有哪些,iapp如何添加网页?  潮流网站制作头像软件下载,适合母子的网名有哪些?  Swift中swift中的switch 语句  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何选择域名并搭建高效网站?  如何快速查询网址的建站时间与历史轨迹?  如何快速搭建支持数据库操作的智能建站平台?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  javascript中对象的定义、使用以及对象和原型链操作小结  建站主机选购指南与交易推荐:核心配置解析  如何通过虚拟主机空间快速建站?  专业公司网站制作公司,用什么语言做企业网站比较好?  如何选择高性价比服务器搭建个人网站?  如何挑选最适合建站的高性能VPS主机?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何快速搭建FTP站点实现文件共享?  小建面朝正北,A点实际方位是否存在偏差?  建站10G流量真的够用吗?如何应对访问高峰?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何通过虚拟机搭建网站?详细步骤解析  C++时间戳转换成日期时间的步骤和示例代码  沈阳制作网站公司排名,沈阳装饰协会官方网站?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  网站制作免费,什么网站能看正片电影?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  如何快速生成ASP一键建站模板并优化安全性? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。