这个项目能做什么
# JavaCV
JavaCV 通过 JavaCPP Presets 包装了流行的计算机视觉和多媒体库——OpenCV、FFmpeg、libdc1394、FlyCapture、Spinnaker、OpenKinect、librealsense、ARToolKitPlus、flandmark、Leptonica 和 Tesseract——使它们可以从 Java 和 Android 访问。
## 功能简介
- 通过 OpenCV 和 FFmpeg 绑定加载和处理图像与视频
- 从网络摄像头、摄像机和视频文件捕获帧
- 将视频输出录制到文件
- 提供基于 Haar 级联的面部检测、轮廓查找、几何变换和标定工具
- 通过 `CanvasFrame` / `GLCanvasFrame` 提供硬件加速的全屏图像显示
- 通过 NIO 缓冲区提供并行执行助手和直接原生内存访问
## 核心类
- `FrameGrabber` / `FrameRecorder` —— 捕获和录制的抽象接口;具体实现包括 `OpenCVFrameGrabber`、`FFmpegFrameGrabber`、`OpenCVFrameRecorder`、`FFmpegFrameRecorder`
- `OpenCVFrameConverter` / `Java2DFrameConverter` —— 在 OpenCV `Mat`/`IplImage`、Java `BufferedImage`、Android `Bitmap` 和 `Frame` 之间进行转换
- `CascadeClassifier` —— 从 XML 文件加载用于对象/面部检测
- `CanvasFrame` / `GLCanvasFrame` —— 显示窗口,支持可选的全屏模式
- `Parallel` —— 在多核上执行任务
- `GeometricCalibrator` / `ProCamGeometricCalibrator` —— 相机和投影仪标定
## 安装
在构建中添平台 BOM。Maven:
```xml
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.14</version>
</dependency>
```
Gradle:
```groovy
implementation 'org.bytedeco:javacv-platform:1.5.14'
```
如需 GPU 加速的 OpenCV 或 GPL 许可的 FFmpeg 构建,请分别添加 `opencv-platform-gpu` 或 `ffmpeg-platform-gpl`。二进制文件覆盖 Android、iOS、Linux、macOS 和 Windows。
## 环境要求
- Java SE 8 或更高版本
- C++ 编译器(用于从源码构建)
- 可选:Android SDK API 24+、JOCL/JOGL 以支持 OpenCL 和 OpenGL
- 32 位和 64 位构件需保持一致,不可混用
## 示例:从网络摄像头检测面部
```java
import org.bytedeco.javacv.*;
import org.bytedeco.opencv.opencv_core.*;
import org.bytedeco.opencv.opencv_objdetect.*;
import static org.bytedeco.opencv.global.opencv_core.*;
import static org.bytedeco.opencv.global.opencv_imgproc.*;
import static org.bytedeco.opencv.global.opencv_objdetect.*;
public class FaceDetect {
public static void main(String[] args) throws Exception {
FrameGrabber grabber = FrameGrabber.createDefault(0);
grabber.start();
CascadeClassifier classifier = new CascadeClassifier(
"haarcascade_frontalface_alt.xml");
OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
CanvasFrame frame = new CanvasFrame("Face Detection");
Mat gray = new Mat();
while (frame.isVisible() &&
(grabbed = converter.convert(grabber.grab())) != null) {
cvtColor(grabbed, gray, COLOR_BGR2GRAY);
RectVector faces = new RectVector();
classifier.detectMultiScale(gray, faces);
for (int i = 0; i < faces.size(); i++) {
Rect r = faces.get(i);
rectangle(grabbed, new Point(r.x(), r.y()),
new Point(r.x() + r.width(), r.y() + r.height()),
new Scalar(0, 255, 0));
}
frame.showImage(grabbed);
}
frame.dispose();
grabber.stop();
}
}
```
## 从源码构建
需要 Maven 3.x 和 JavaCPP 1.5.14。在 JavaCPP、JavaCPP Presets 和 JavaCV 目录中运行 `mvn install`。快照版本也可在 http://bytedeco.org/builds/ 获取。
## 相关链接
- 仓库:https://github.com/bytedeco/javacv
- 邮件列表:http://groups.google.com/group/javacv
- 讨论区:https://github.com/bytedeco/javacv/discussions
评论
0 评分人数达到10人后显示
登录后参与讨论。