本程序通过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小时内与您取得联系。