【问题标题】:Using OpenCV Java Bindings to read an image使用 OpenCV Java 绑定读取图像
【发布时间】:2013-03-21 03:24:51
【问题描述】:

我正在使用新的OpenCV Java bindings 读取图像并对图像进行一些处理。我正在尝试使用 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/

不幸的是,sample java code provided 甚至没有显示如何读取图像!

【问题讨论】:

    标签: java opencv image-processing javacv


    【解决方案1】:

    使用 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);
    

    【讨论】:

    • 这是一个更清晰的答案。
    • 在当前的 OpenCV 中似乎常量是 Imgcodecs.CV_LOAD_IMAGE_GRAYSCALE
    【解决方案2】:

    如果您已正确安装支持 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 和所有,我尝试运行你的代码并且我得到:“线程“主”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)"
    • 您没有正确引用本机库。关注tutorial,更多关注。
    【解决方案3】:

    对于 macOS,您可以使用:

    import org.opencv.imgcodecs.Imgcodecs;
    
    
    Mat logo = Imgcodecs.imread("resources/images/gambar.jpg");
    

    对我来说,我使用 opencv_java320.dll

    【讨论】:

      【解决方案4】:

      answer by @David Miguel 有一个重要更新。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-27
        • 2018-06-18
        • 2016-06-10
        • 1970-01-01
        • 2016-02-28
        • 2019-04-16
        • 2017-03-20
        • 2016-10-13
        相关资源
        最近更新 更多