大家好,我是汪小成。
最近对图片处理比较感兴趣,就研究了一下OpenCV。在这里跟大家分享一下。
为什么选择OpenCV?
OpenCV是一个开源的计算机视觉库,在图片处理领域是一个“老前辈”,功能超级丰富。
环境准备
首先,我用Maven创建了一个新的示例项目:
mvn archetype:generate \
-DgroupId=cn.ddcherry.opencv \
-DartifactId=01.hello-world \
-Dversion=1.0.0 \
-Dpackage=cn.ddcherry.opencv \
-DarchetypeArtifactId=maven-archetype-quickstart \
-DinteractiveMode=false
然后在pom.xml中添加JavaCV的依赖:
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>javacv-platform</artifactId>
<version>1.5.11</version>
</dependency>
opencv-platform由Bytedeco社区维护,为Java开发者提供了完整的OpenCV Java封装。包括:
- OpenCV的Java API接口封装(基于JNI)
- 各平台预编译的native动态库(
*.dll、*.so、*.dylib) - 支持常用的图像处理模块
- 可直接用于Maven项目
使用opencv-platform的优点:
- 开箱即用 - 内置所有平台的原生库,无需手动配置
- 跨平台 - 一次开发,支持Windows、Linux、macOS
- 管理简单 - 使用Maven快速引入
- 功能完整 - 支持OpenCV所有主要模块
- 适合打包部署 - 打包部署,无需额外配置
第一个OpenCV程序
先来看下完整代码:
package cn.ddcherry.opencv.demo;
import org.bytedeco.opencv.opencv_core.Mat;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite;
public class Hello {
public static void main(String[] args) {
// 示例图片路径
String imagePath = "input_images/flower.jpg";
// 加载图像
Mat image = imread(imagePath);
// 检查图像是否成功加载
if (image.empty()) {
throw new RuntimeException("错误: 无法读取图像文件 '" + imagePath + "'");
}
// 保存图片
boolean result = imwrite("output_images/flower_output.jpg", image);
System.out.println(result ? "图片保存成功。" : "图片保存失败。");
}
}
这是一个非常非常简单的OpenCV示例程序,演示了使用OpenCV读取一张图片,然后保存到另外一个文件夹下。代码保持了汪小成一贯的代码风格:结构清晰、注释完善。😁