JavaCV入门教程

一、准备软件

(一)准备javaCV 直接官网下载(opencv.org),获得一个叫【opencv-3.1.0.exe】的文件。别运行【右键—解压到当前文件夹】,获得一个【opencv-3.1.0】的文件夹。

(二)准备JDK8 这个就不用多说了吧,因为跑javaFX要jdk8.

(三)准备JavaFX 因为官网的Demo是javaFX写的GUI,必须要JavaFX 。也可以自己用Swing重写GUI。这个不用下,就在jdk8目录下就有。

(四)准备IDE,推荐使用MyEclipse2013。

(五)下载官网Demo 地址【http://opencv-java-tutorials.readthedocs.io/en/latest/】全洋文,看不懂可以用谷歌浏览器的全文翻译。打不开的可以用蓝灯代理。

二、配置环境

(一)导入官方Demo 打开MyEclipse2013,【资源管理器空白处—右键—导入—选中现有项目到工作空间—下一步—浏览—找到demo的目录—完成】

(二)配置jdk环境 【窗口—首选项—java—已安装的jre—添加—把jdk8添加进去】

(三)配置javaCV 【窗口—首选项—java—构建路径—用户库—新建—输入javacv—确定—选中javacv—添加外部jar—选中[opencv-3.1.0\opencv\build\javaopencv-310.jar]】【展开javacv—本机库位置—编辑—外部文件夹—选中[opencv-3.1.0\opencv\build\java\x86\ opencv_java310.dll]】

(四)配置javaFX 找到[jdk1.8.0_91\jre\lib\ext\jfxrt.jar] 添加进构建路径

(五)更改系统库为jdk8 这个也不废话了,到这里就可以直接运行了。

三、JavaCV的一些知识

Mat类表示一个图片矩阵,要处理的图片都要读进这个矩阵中。

VideoCapture类表示一个视频对象,它的open()方法传视频地址就是打开视频,传设备号就是打开摄像头。

其它官方Demo上都有说明,想玩三维重建的去学OpenGL,java平台叫JOGL,网上没什么教程。Java3D也可以,也没什么教程

官方API:http://docs.opencv.org/

(四)图片的一些必备知识

(一)图像的认识

图片分矢量图和像素图图,矢量图是由数学表示,比较抽象,不太好理解,比如你脑海里想象一个四边形,这个四边形就是矢量的。CDR、CAD处理的图像就是矢量图,因为是数学表示的,可以无限放大和缩小,不会产生锯齿。像素图是由矩阵的像素点组成,每个像素点就是个小方块,每个方块只能显示一种颜色,单位面积内像素点越密集,图像越清晰。但是放大以后因为像素点是方形的,所以能看见锯齿。PS软件就是处理像素图的。JavaCV也是典型的像素图处理软件,通过相机、摄像头获取到的图片都是像素图。

(二)像素点的认识

像素点每次只能显示一个颜色,颜色由3基本色(RGB)或者4基本色(CMYK)组成,在任何设备彩色屏幕上显示的都是RGB像素,彩色打印机打印的是CMYK色。这就是为什么在电脑上显示的颜色和打印出来的颜色有小许不同。JavaCV主要算法就是计算像素点的颜色,通过各种数学变换得到相似度一类的。笔者个人认为这种方式太牵强,还是要在矢量图上下功夫才行,因为大脑内的所有图像都是矢量的。(个人意见,勿喷,要脸)

(二)视频的认识

视频由图片组成,一帧代表一张图片,帧率就是指每秒切换多少张图片。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaCV是Java平台上的计算机视觉库,它提供了一系列处理图像和视频的工具和算法,包括图像处理、特征提取、目标检测、人脸识别等。下面是JavaCV图像处理的一些基本教程: 1. 安装JavaCV 首先需要安装JavaCV,可以在官网下载最新版本的JavaCV,并将其添加到Java项目的classpath中。具体安装步骤可以参考官网的说明。 2. 加载和显示图像 JavaCV提供了一些方法来加载和显示图像。下面是一个简单的例子: ``` import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_core.CvScalar; import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.javacv.Java2DFrameUtils; import org.bytedeco.javacv.JavaFXFrameConverter; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class LoadAndShowImage extends Application { @Override public void start(Stage primaryStage) throws Exception { // 加载图像 Mat image = opencv_imgcodecs.imread("test.jpg"); // 转换为JavaFX Image JavaFXFrameConverter fxConverter = new JavaFXFrameConverter(); ImageView imageView = new ImageView(fxConverter.convert(Java2DFrameUtils.toBufferedImage(image))); // 显示图像 BorderPane root = new BorderPane(); root.setCenter(imageView); Scene scene = new Scene(root, 640, 480); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 这个例子加载了一张名为test.jpg的图像,并将其显示在JavaFX的窗口中。 3. 图像处理 JavaCV提供了一系列图像处理的方法,可以对图像进行滤波、边缘检测、二值化等操作。下面是一个简单的例子,将图像进行二值化处理: ``` import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.opencv.global.opencv_imgproc; import org.bytedeco.javacpp.BytePointer; import org.bytedeco.javacv.Java2DFrameUtils; import org.bytedeco.javacv.JavaFXFrameConverter; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.image.ImageView; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class ImageProcessing extends Application { @Override public void start(Stage primaryStage) throws Exception { // 加载图像 Mat image = opencv_imgcodecs.imread("test.jpg"); // 转为灰度图像 Mat gray = new Mat(); opencv_imgproc.cvtColor(image, gray, opencv_imgproc.COLOR_BGR2GRAY); // 二值化处理 Mat binary = new Mat(); opencv_imgproc.threshold(gray, binary, 0, 255, opencv_imgproc.THRESH_BINARY | opencv_imgproc.THRESH_OTSU); // 转换为JavaFX Image JavaFXFrameConverter fxConverter = new JavaFXFrameConverter(); ImageView imageView = new ImageView(fxConverter.convert(Java2DFrameUtils.toBufferedImage(binary))); // 显示图像 BorderPane root = new BorderPane(); root.setCenter(imageView); Scene scene = new Scene(root, 640, 480); primaryStage.setScene(scene); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 这个例子将图像转为灰度图像,并进行二值化处理。可以通过修改threshold方法中的参数来调整二值化的阈值。 4. 特征提取和目标检测 JavaCV还提供了一些特征提取和目标检测的方法,例如SIFT、SURF、HOG等。下面是一个简单的例子,使用SIFT算法提取图像的关键点和描述符: ``` import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_features2d.KeyPointVector; import org.bytedeco.opencv.global.opencv_features2d; import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.javacpp.BytePointer; public class FeatureExtraction { public static void main(String[] args) { // 加载图像 Mat image = opencv_imgcodecs.imread("test.jpg"); // 使用SIFT算法提取关键点和描述符 opencv_features2d.SIFT sift = opencv_features2d.SIFT.create(); KeyPointVector keypoints = new KeyPointVector(); Mat descriptors = new Mat(); sift.detectAndCompute(image, new Mat(), keypoints, descriptors); // 输出关键点和描述符 System.out.println("keypoints:"); for (int i = 0; i < keypoints.size(); i++) { System.out.println(keypoints.get(i).pt().x() + "," + keypoints.get(i).pt().y()); } System.out.println("descriptors:"); BytePointer ptr = descriptors.createIndexer(); for (int i = 0; i < descriptors.rows(); i++) { for (int j = 0; j < descriptors.cols(); j++) { System.out.print(ptr.get(i, j) + " "); } System.out.println(); } } } ``` 这个例子使用SIFT算法提取了图像的关键点和描述符,并输出了结果。可以使用同样的方法提取其他特征,并进行目标检测等操作。 以上是JavaCV图像处理的一些基本教程,希望对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值