JAVA当中摄像头调用(并实现摄像头的滤镜效果)
摄像头的调用
1.包的导入
1.1首先进入webcam官网
1.2然后点击Download下的下载的webcam-capture-0.3.10-dist.zip
1.3下载完成包以后进入eclipse界面,右击包的选项选择 build path中的configure build path–>libraries—>Add External JAR…—>选择需要的三个包----(在下面的第二张图当中)
三个文件的名字如下
2.调用包的具体代码以及实现摄像头滤镜效果的代码
2.1具体摄像头的打开,获取
Webcam webcam =Webcam.getDefault();
//将摄像头打开
webcam.open();
2.2摄像头实现滤镜效果的代码
package com.lk.DrawPixel0112;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.util.Random;
//今天的任务:1完成线程的博客的书写2完成图像处理效果的博客的书写3将整个代码重新写一遍,边写边总结和领悟自己书写的内容
import com.github.sarxos.webcam.Webcam;
//要写一篇关于进程,线程,程序的相关的教程
public class ThreadPixel extends Thread {
Graphics g;
BufferedImage bff1;
public boolean flag=true;
String type;
float[][] kernel1 = {
{
0, -1, 0 }, {
-1, 1.99f, 1 }, {
0, -1, 0 }};
//有三种type如果type是视频效果一,我们用灰度的效果,如果是视频效果二我们用卷积1的效果,如果是视频效果三,我们用油画的效果
public ThreadPixel(Graphics g)
{
this.g=g;
}
//函数作用:实现摄像头的多种效果的传递
//参数:是缓冲的图片的点
public BufferedImage drawhd(BufferedImage bff)
{
//首先是获取的摄像头的照片是有一定大小的
//创建了一个和bff一样大小的画布,bff1
//这个和数组那个的区别在哪里
bff1 =new BufferedImage(bff.getWidth(),bff.getHeight(),BufferedImage.TYPE_INT_RGB);
Graphics ng =bff1.getGraphics();
//养成看源代码的习惯,getRGB先走的是x轴,然后走的是y轴,bufferedImage也是这个样子的,先是宽度然后在是高度,不然可能发生越界的情况,因为获取的摄像头的大小是不能够确认的事情
for(int i=0;i<bff.getWidth();i++)
{
for(int j=0;j<bff.getHeight();j++)
{
//因为获取rgb值的时候是从上往下走的,在获取rgb值的时候越界了
int pixel=bff.getRGB(i, j);
Color color =new Color(pixel);
//(r,g,b)
int red =(int)(color.getRed()*0.299);
int green =(int)(color.getGreen()*0.587);
int blue =(int)(color.getBlue()*0.114);
Color newcolor =new Color(red+green+blue,red+green+blue,red+green+blue);
ng.setColor(newcolor);
ng.drawLine(i, j, i, j);
}
}
return bff1;
}
public BufferedImage drawyh(BufferedImage bff)
{
BufferedImage bff1 =new BufferedImage(bff.getWidth(),bff.getHeight(),BufferedImage.TYPE_INT_BGR);
Graphics ng =bff1.getGraphics();
for(int i=