8

我正在使用新的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

4 回答 4

25

使用 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);
于 2016-11-06T14:49:51.963 回答
6

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

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);
于 2013-03-30T15:45:00.970 回答
1

对于 macOS,您可以使用:

import org.opencv.imgcodecs.Imgcodecs;


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

对我来说,我使用 opencv_java320.dll

于 2018-07-06T02:03:38.063 回答
0

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

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

于 2020-11-12T07:57:34.147 回答