javaCV使用总结
编写人:曾定新
日期:2014-04-23
1.简介
    JavaCV 是一款开源的视觉处理库,基于GPLv2协议。
2.特点
JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了OpenCVlibdc1394 OpenKinectvideoInputARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包 Android在内的Java平台上调用这些接口。
另外JavaCV还带有硬件加速的全屏幕图像显示(CanvasFrame),易于在多个内核中执行并行代码(并 行),用户友好的几何和彩的相机和投影仪校准 GeometricCalibratorProCamGeometricCalibratorProCamColorCalibrator ),检测和特征点(ObjectFinder),
一类是实现投影,摄像系统(直接图像对齐设置匹配主要 GNImageAlignerProjectiveTransformerProjectiveGainBiasTransformerProCamTransformer ReflectanceInitializer),以及在JavaCV类杂项功能。
3.总结
JavaCV:le/p/javacv/
1.先从下载JAR包
下载javacv-0.7-bin.zip和javacv-0.7-cppjars.zip
2.新建java项目,导入jar包javacv-0.7-bin.zip 中的javacpp.jarjavacv.jarjavacv-0.7-cppjars.zip中的opencv.jar,其余jar包的要注意的X86X64之分,关键看你的计算机安装
JDK是多少位的),javaCV_demo,测试代码如下,以下代码实现调用摄像并拍照。   
import java.awt.Graphics2D; 
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; 
jfinal jar包下载
import lecode.javacv.CanvasFrame; 
import lecode.javacv.FrameGrabber.Exception;
import lecode.javacv.OpenCVFrameGrabber; 
import lecode.javacv.cpp.opencv_core.IplImage; 
import static lecode.javacv.cpp.opencv_core.cvReleaseImage;
public class Demo{
    public static void main(String[] args) throws Exception {
        final String savedImageFile = "d:\\my1.jpg"//拍摄所存储的文件 
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0); 
        IplImage image = null;
        try {
            grabber.start();
            image =ab(); //将所获取摄像头数据放入IplImage 
        } catch (Exception e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        }  //开始获取摄像头数据 
     
         
        int width = image.width();   
        int height = image.height(); 
        final BufferedImage bImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);   
        Graphics2D bGraphics = ateGraphics();                       
         
        CanvasFrame canvas = new CanvasFrame("Camera",1);
        canvas.setCanvasSize(200, 200);   
       
        canvas.getCanvas().addMouseListener(new MouseAdapter(){   
            public void mouseClicked(MouseEvent e){       
              try
                ImageIO.write(bImage, "jpg", new File(savedImageFile));//数据写入my.jpg 
                } 
              catch (IOException e1){ 
                // TODO Auto-generated catch block 
                e1.printStackTrace(); 
                }   
            } 
      }); 
       
      try {
        while(canvas.isVisible() && (ab()) != null){   
                canvas.showImage(image); 
                bGraphics.BufferedImage(),null,0,0); 
            }
        } catch (Exception e2) {
            // TODO Auto-generated catch block
            e2.printStackTrace();
        } 
         
     
      cvReleaseImage(image); //释放内存当中的图片
        grabber.stop();
        canvas.dispose();  //销毁摄像头
    }
}
3.结合以上的例子使用中遇到的问题和解决方案。
1).swing窗口显示摄像头所照的画面的定位和显示画面设置的大小。
      canvas.setCanvasSize(200, 200); 设置显示画面大小
      canvas.getCanvas();显示画板
      JPanel sysLogo = new JPanel();
      sysLogo.setBounds(x, y, Width, Hight);显示画面的定位
      sysLogo.add(canvas.getCanvas());
2).摄像头所照到的画面的数据传送。
while(canvas.isVisible() && (ab()) != null){   
                canvas.showImage(image);  //摄像头数据显示                                bGraphics.BufferedImage(),null,0,0);  //储存数据
}
以上代码只要摄像头一启动while就会不停的在跑直到摄像头停止,在咱们的项目的当中要加载swing窗口而又要加载摄像头,所以它们之间有冲突加载了摄像头就会导致咱们swing的界面加载不出来,我现在的处理是用了一个线程去加载摄像头。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。