小浩浅谈之在Java中摄像头的使用
在春节前夕,在陈哥的指导下,完成了美颜相机中一些滤镜效果的添加,但是之前滤镜效果的使用都是基于单独的图片,而我们的视频也是由一帧一帧的图片构成,所以我们在想完成美颜相机的情况下,首先要学会的是如何获取视频(javaOpenCV库,或者WebCamp),以下采用WebCamp作为实例!
将要实现的功能包括但不限定于:拍照,视频获取,录像,截图,人脸识别,特效..........
1.主程序的编写,主要还是运用awt和swing组件
package CL2.Draw0117.Video0123; import javax.swing.*; import java.awt.*; public class VDraw {public void initt() {//窗体设置JFrame jf = new JFrame();//窗体大小设置jf.setSize(810,900);//窗体名称设置jf.setTitle("视频摄像捕捉");//退出进程设置jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);jf.setLocationRelativeTo(null);//窗体布局设置BorderLayout borderLayout=new BorderLayout();jf.setLayout(borderLayout);//中心窗体背景设置JPanel center=new JPanel();center.setBackground(Color.white);jf.add(center,BorderLayout.CENTER);//Vpixelmouse对象的创立,便于监听器的添加Vpixelmouse mouse=new Vpixelmouse();//菜单栏JMenuBar jmb = new JMenuBar();//菜单栏位置的固定jf.add(jmb,BorderLayout.NORTH);//菜单选项JMenu jmn = new JMenu("视频");jmb.add(jmn);//子菜单JMenuItem jmi = new JMenuItem("打开");JMenuItem jmi2 = new JMenuItem("关闭");jmn.add(jmi);jmn.add(jmi2);//可视一定要在画笔前jf.setVisible(true);mouse.g=center.getGraphics();//添加监听器jmi.addActionListener(mouse);jmi2.addActionListener(mouse);}public static void main(String[] args) {VDraw vDraw=new VDraw();vDraw.initt();} }
2.
package CL2.Draw0117.Video0123; import javax.imageio.ImageIO; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException;public class Vpixelmouse implements ActionListener {public Graphics g;//类来传递数据public Vthreadpixel vp;public boolean flag;public void actionPerformed(ActionEvent e){String st = e.getActionCommand();if ("打开".equals(st)) {// 启动多线程// 创建线程对象,显示该线程创建一次if (vp == null) {vp=new Vthreadpixel(g);// 启动线程vp.start();}} else if ("关闭".equals(st)) {vp.flag = false;System.out.println("关闭");}}public int[][] getImagePixel(String path) {File file = new File(path);// ImageIO:对图片文件进行I/O// 获取缓冲图片BufferedImage buffImage = null;try {buffImage = ImageIO.read(file);} catch (IOException e1) {e1.printStackTrace();}int w = buffImage.getWidth();int h = buffImage.getHeight();int[][] pixelArr = new int[w][h];// 获取图片中的每一个像素值保存到二维数组中for (int i = 0; i < w; i++) {for (int j = 0; j < h; j++) {int pixel = buffImage.getRGB(i, j);pixelArr[i][j] = pixel;}}return pixelArr;} }
3.多线程的使用
package CL2.Draw0117.Video0123;import com.github.sarxos.webcam.Webcam;import java.awt.*; import java.awt.image.BufferedImage;public class Vthreadpixel extends Thread {public Graphics g;//控制线程的标记public boolean flag = true;//初始化画笔对象public Vthreadpixel(Graphics g) {this.g = g;}// 启动线程后自定执行的方法// run 方法执行完,该线程结束,线程一旦结束不能再次启动public void run() {System.out.println("启动线程.."+this.getName());// 启动摄像头,放在线程中启动Webcam webcam=Webcam.getDefault();webcam.open();//while (flag) {// 获取摄像头拍到的数据BufferedImage bufferedImage=webcam.getImage();//大小的设置g.drawImage(bufferedImage,100,100,400,300,null);}} }
4.效果如图
小浩浅谈之在Java中摄像头的使用相关推荐
- 小浩浅谈之Java美颜相机pc端(视频)
在之前的文章中,给大家介绍了如果使用WebCamp来使用电脑的摄像头以及如何为图片添加各种滤镜,那么在这我们进行一个相互结合,就构成了一个我们pc端的美颜相机. 1.第一步和之前一样,就是框体 的创建 ...
- 小浩浅谈Java三特性(封装,继承,多态)
1.封装,什么是封装,谈谈自己对封装的理解,封装就是将类的信息(比如说类的属性)隐藏在类的内部,不允许外部程序直接访问.此时就要提到一个关键字private,他是一个权限修饰符,可以用来修饰成员(变量 ...
- 小浩浅谈如何为图片提供滤镜功能
近些天,一直想做一个pc版的美颜相机,但是万事开头总要有第一步,首先就是美颜相机的添加滤镜问题,直接上手视频未免过于着急,于是就想先对单张图片来实现滤镜功能的添加. 1.第一步,就是窗体和面板的创立, ...
- java javascript数组_浅谈javascript和java中的数组
javascript中的数组 数组的创建 直接创建方式 var str = ['java', 'js']; 使用new创建方式: var a = new Array(10); // 定义长度为1 ...
- 小浩浅谈利用Java做一个视频运动追踪识别
寒假期间,一起做了一款pc端的美颜相机,在交流会期间,看到有的同学做了一些非常牛的功能添加,心血来潮,想整个视频运动追踪识别,在这和大家分析一下算法思路 1.原理很简单,就是在视频中的物体,就可以通过 ...
- 浅谈Android和java中的多线程下载
为什么要使用多线程下载呢? 究其原因就一个字:"快",使用多线程下载的速度远比单线程的下载速度要快,说到下载速度,决定下载速度的因素一般有两个: 一个是客户端实际的网速,另一个则是 ...
- 小浩浅谈 程序/进程/线程,并行/并发
1.程序,随着时代和社会的发展,我们开始学习各种各样的计算机语言,开始离不开编程,但是我们需要了解的是,什么是程序?程序代表什么?以及程序的作用?以及我们编程,编写程序是为了干嘛? 在这,我认为程序指 ...
- python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题
直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...
- php编码 js解码,浅谈php和js中json的编码和解码
php中 1)编码 $jsonstr = json_encode($array) 2)解码 $arr = json_decode($jsonstr) echo json_encode("中文 ...
最新文章
- B/S系统常见缺陷整理和解决方案
- 组件生命周期管理和通信方案
- leetcode -python 三数之和原创
- jeecms内容管理系统使用了哪些技术
- windows下的gvim配置
- 【Linux】排序命令sort
- sqlserver 判断字段是否为空字符串或者null
- JAVA中list,set,数组之间的转换详解
- 使用git命令把自己的代码上传到gitlab上
- 充电水滴融合特效 html+css
- 图片马赛克去除工具_黑科技!利用 AI 技术,马赛克终于可以去掉了
- 【24】搭建FCN语义分割网络完成自己数据库图像分割(1)
- 三星新硬盘 旧硬盘_我应该如何存放旧硬盘和电子组件?
- Python3的fo if while 循环
- 经典语录~想要的东西立马去买,想做的事情马上去做,想见的人立马去见
- 狼人杀未能连接服务器,玩狼人杀最不能惹的五个职业!连心理专家都排不到第一?...
- Laravel 数据库去重计数
- sublist3r报错解决
- DenseNet(Densely Connected Convolutional Networks)学习笔记
- UIL(单例框架)Android-Universal-Image-Loader (图片加载框架)