使用OpenCV Java绑定读取图像

9
我是一名有用的助手,可以进行文本翻译。
我正在使用新的OpenCV Java绑定来读取图像并对图像进行处理。我正在尝试使用Java绑定将C代码转换为Java,但似乎找不到相关的方法:
C代码:
cv::Mat img = cv::imread(argv[1]);
cv::Mat gray;
cv::cvtColor(img, gray, CV_BGR2GRAY);
int erosion_size = 5;
cv::Mat element = cv::getStructuringElement(cv::MORPH_CROSS,
                                       cv::Size(2 * erosion_size + 1, 2 * erosion_size + 1),
                                       cv::Point(erosion_size, erosion_size) );
cv::erode(gray, gray, element);

我找不到:

  • imread
  • cvtcolor
  • getStructuringElement
  • erode

我在这里的api中查找了一下: http://docs.opencv.org/java/

不幸的是,提供的Java示例代码甚至没有展示如何读取图像!

4个回答

26

使用OpenCV for Java读取图像:

OpenCV 2.x (JavaDoc)

Mat img = Highgui.imread("path/to/img");

OpenCV 3.x (JavaDoc)

Mat img = Imgcodecs.imread("path/to/img");

在两个版本中,您可以传递第二个参数来指定如何加载图像:
  • CV_LOAD_IMAGE_ANYDEPTH: 当输入具有相应深度时,返回16位/32位图像,否则将其转换为8位。
  • CV_LOAD_IMAGE_COLOR: 总是将图像转换为彩色图像。
  • CV_LOAD_IMAGE_GRAYSCALE: 总是将图像转换为灰度图像。
示例:
// OpenCV 2.x   
Mat img = Highgui.imread("path/to/img", Highgui.CV_LOAD_IMAGE_GRAYSCALE);
// OpenCV 3.x
Mat img = Imgcodecs.imread("path/to/img", Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE);

这是一个更简洁的答案。 - Makmeksum
在当前的OpenCV中,常量为Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE。 - vextorspace

6

如果您已经正确安装了支持Java桌面的Opencv,并包含opencv-2.4.4.jar,那么您应该导入:

import org.opencv.imgproc.Imgproc;
import org.opencv.core.Point;
import org.opencv.core.Size;
import org.opencv.highgui.Highgui;

你的代码将会像这样:

Mat img = Highgui.imread(argv[1], Highgui.CV_LOAD_IMAGE_GRAYSCALE);
int erosion_size = 5;
Mat element  = Imgproc.getStructuringElement(
    Imgproc.MORPH_CROSS, new Size(2 * erosion_size + 1, 2 * erosion_size + 1), 
    new Point(erosion_size, erosion_size)
);
Imgproc.erode(img, img, element);

我知道这是一个旧帖子,但我配置了open-cv等,尝试运行您的代码时出现以下错误:"Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.highgui.Highgui.imread_0(Ljava/lang/String;I)J at org.opencv.highgui.Highgui.imread_0(Native Method) at org.opencv.highgui.Highgui.imread(Highgui.java:306) at pack.ColoredObjectTrack.main(ColoredObjectTrack.java:41)" - susparsy
1
您没有正确引用本地库。请更加注意并遵循此教程 - andriy

1
对于macOS,您可以使用:

import org.opencv.imgcodecs.Imgcodecs;


Mat logo = Imgcodecs.imread("resources/images/gambar.jpg");

对于我来说,我使用 opencv_java320.dll



0

David Miguel的回答有一个重要的更新。

Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE在opencv 4.x中已不再可用。您应该使用Imgcodecs.imread("/resources/images/test.png", Imgcodecs.IMREAD_GRAYSCALE)来加载灰度图像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接