openCV在Java中的使用

发表于2020-07-05,长度1660, 271个单词, 4分钟读完
Flag Counter

opencv试一个C语言实现的用于操作多媒体文件的库。以前使用它基本都是通过Python来实现对图片或者音视频文件的处理,这里简单说一下通过Java调用openCV 库的一种方法。当然为了更具直观性,我们和python对比一下。

通过Python 改变图片的大小

python 调用opencv非常简单。安装如下:

pip install opencv-python

需要使用python3

处理图片分三步:读取、改变大小、保存。这三步也对应了三个函数:

>>> import cv2
>>> image = cv2.imread('/Users/sheldon/Pictures/plane.jpg')
>>> new_img = cv2.resize(image, (1000,1000))
>>> cv2.imwrite('/Users/sheldon/Pictures/newPlane.jpg', new_img)
True

上面我们把plane.jpg改成大小1000x1000像素的新图片并保存(不影响原图片)。

通过Java调用openCV

上面看到opencv处理图片异常简单。其实通过Java也一样,因为它们后端调用的是相同的本地库。

使用Java的话,首先要把openCV 的封装类拉下来,这里使用maven:

<dependency>
    <groupId>org.bytedeco</groupId>
    <artifactId>opencv-platform</artifactId>
    <version>4.3.0-1.5.3</version>
</dependency>

业务代码如下:

import org.bytedeco.opencv.opencv_core.Mat;
import org.bytedeco.opencv.opencv_core.Size;

import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;
import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite;
import static org.bytedeco.opencv.global.opencv_imgproc.INTER_LINEAR;
import static org.bytedeco.opencv.global.opencv_imgproc.resize;

public class ResizeImg {
    public static void main(String[] args) {
        Mat imread = imread("/Users/sheldon/Pictures/5.jpg");
        Mat dst = new Mat();
        resize(imread, dst, new Size(), 0.5, 0.5, INTER_LINEAR);
        imwrite("/Users/sheldon/Pictures/4.jpg", dst);
    }
}

看到代码也差不多是3句。


这里多说一句:上面引入了一个操作openCV 本地库的包装工具,叫bytedeco。这是一个开源工具,提供了大量通过Java本地调用常用库的入口。比如ffmpeg,比如tensorflow。大家有兴趣可以探索一下,地址在https://github.com/bytedeco/javacpp-presets。这里用到的OpenCV也是其中一套:https://github.com/bytedeco/javacpp-presets/tree/master/opencv

Written on July 5, 2020
分类: dev, 标签: java
如果你喜欢,请赞赏! davelet