本文目录导读:

OpenCV Java 的使用方法主要分为以下几个步骤:
环境配置
下载 OpenCV Java 库
从 OpenCV 官网 下载对应系统版本的 OpenCV(建议 4.x 版本)。
配置项目
Maven 方式(推荐)
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.9.0-0</version>
</dependency>
手动方式
- 将
opencv-xxx.jar添加到项目依赖 - 将对应的
.dll(Windows)或.so(Linux/Mac)文件添加到java.library.path
基本使用方法
加载库
import nu.pattern.OpenCV;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class OpenCVTest {
public static void main(String[] args) {
// 加载 OpenCV 库
OpenCV.loadLocally(); // 自动加载本地库
// 或者手动加载
// System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
}
常用操作示例
读取和显示图片
// 读取图片
Mat src = Imgcodecs.imread("input.jpg");
// 检查是否读取成功
if (src.empty()) {
System.out.println("无法读取图片");
return;
}
// 保存图片
Imgcodecs.imwrite("output.jpg", src);
灰度转换
Mat gray = new Mat(); Imgproc.cvtColor(src, gray, Imgproc.COLOR_BGR2GRAY);
边缘检测
Mat edges = new Mat(); Imgproc.Canny(src, edges, 50, 150);
缩放图像
Mat resized = new Mat(); Size size = new Size(300, 300); Imgproc.resize(src, resized, size);
人脸检测
// 加载分类器
CascadeClassifier faceDetector = new CascadeClassifier();
faceDetector.load("haarcascade_frontalface_alt.xml");
// 检测人脸
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(gray, faceDetections);
// 绘制矩形
for (Rect rect : faceDetections.toArray()) {
Imgproc.rectangle(src, new Point(rect.x, rect.y),
new Point(rect.x + rect.width, rect.y + rect.height),
new Scalar(0, 255, 0));
}
完整示例代码
import nu.pattern.OpenCV;
import org.opencv.core.*;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
public class ImageProcessor {
public static void main(String[] args) {
// 加载 OpenCV
OpenCV.loadLocally();
try {
// 读取图片
Mat image = Imgcodecs.imread("input.jpg");
if (image.empty()) {
System.out.println("图片读取失败");
return;
}
// 转换为灰度图
Mat gray = new Mat();
Imgproc.cvtColor(image, gray, Imgproc.COLOR_BGR2GRAY);
// 高斯模糊
Mat blurred = new Mat();
Imgproc.GaussianBlur(gray, blurred, new Size(5, 5), 1.5);
// Canny 边缘检测
Mat edges = new Mat();
Imgproc.Canny(blurred, edges, 50, 150);
// 保存结果
Imgcodecs.imwrite("gray.jpg", gray);
Imgcodecs.imwrite("edges.jpg", edges);
System.out.println("处理完成!");
} catch (Exception e) {
e.printStackTrace();
}
}
}
常见问题和解决方案
库加载失败
// 方法1:使用 OpenCV 官方提供的加载方式
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// 方法2:指定路径
System.setProperty("java.library.path", "/path/to/opencv/build/java/x64");
路径问题
确保分类器文件(如 haarcascade_frontalface_alt.xml)在正确路径下,通常位于 OpenCV 安装目录的 data/haarcascades/ 文件夹中。
开发建议
- 使用 Maven/Gradle 管理依赖:避免手动配置库文件
- 注意内存管理:OpenCV 的 Mat 对象需要手动释放
- 性能优化:对大批量图片处理时考虑使用多线程
- 调试技巧:使用
HighGui.imshow()显示中间结果
这就是 OpenCV Java 的基本使用方法,如果需要更复杂的操作,可以参考 OpenCV Java 官方文档。