javaCV使用总结
编写人:曾定新
日期:2014-04-23
1.简介
JavaCV 是一款开源的视觉处理库,基于GPLv2协议。
2.特点
JavaCV是对各种常用计算机视觉库的封装后的一组jar包,其中封装了OpenCV、libdc1394、 OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口,可以通过其中的utility类方便的在包 括Android在内的Java平台上调用这些接口。
另外JavaCV还带有硬件加速的全屏幕图像显示(CanvasFrame),易于在多个内核中执行并行代码(并 行),用户友好的几何和彩的相机和投影仪校准 (GeometricCalibrator,ProCamGeometricCalibrator,ProCamColorCalibrator ),检测和特征点(ObjectFinder),
一类是实现投影,摄像系统(直接图像对齐设置匹配主要 GNImageAligner,ProjectiveTransformer,ProjectiveGainBiasTransformer,ProCamTransformer 和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.jar,javacv.jar,javacv-0.7-cppjars.zip中的opencv.jar,其余jar包的要注意的X86和X64之分,关键看你的计算机安装
的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小时内删除。
发表评论