【问题标题】:UnsatisfiedLinkError while executing new Mat()执行 new Mat() 时出现 UnsatisfiedLinkError
【发布时间】:2015-08-20 05:45:33
【问题描述】:

我目前正在尝试编写一个小程序来给新生拍照并用他们的名字等保存他们,以简化铭文等事情。

所以这是我的问题,我找到了一个很好的教程来帮助我使用网络摄像头: http://www.codeproject.com/Tips/717283/How-to-use-OpenCV-with-Java-under-NetBeans-IDE

我可以毫无错误地运行这个项目,但是当我尝试将一些代码导入我的时,我得到了这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: org.opencv.core.Mat.n_Mat()J
    at org.opencv.core.Mat.n_Mat(Native Method)
    at org.opencv.core.Mat.<init>(Mat.java:24)
    at recupphoto.Ihm.<init>(Ihm.java:38)
    at recupphoto.RecupPhoto.main(RecupPhoto.java:19)
Java Result: 1

当我执行这些行时发生错误:

Mat frame = new Mat();
MatOfByte mem = new MatOfByte();

这是我的导入,以防它有助于找出:

import java.util.ArrayList;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import javax.imageio.ImageIO;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import org.opencv.core.Mat;

import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.videoio.VideoCapture;

编译时收到此消息,不知道是否相关

注意:某些输入文件使用未经检查或不安全的操作。 注意:重新编译时使用 -Xlint:unchecked for details。

调用 Mat() 时会出现两个错误(我猜),但我找不到解决方法。

我真的应该在这里使用一些帮助或提示!感谢您阅读本文,对不起我的英语不好!

【问题讨论】:

  • 这种错误表明缺少动态可加载库(位于 OpenCV 的 Java API 后面的本机代码的一部分),可能它不在库加载路径等中。您应该检查您的安装设置。
  • 安装设置是什么意思?我是初学者。
  • 我的意思是 - 您放置 OpenCV 库的位置,是否正确遵循了 OpenCV 安装过程中的所有设置步骤。完成 OpenCV 安装后是否重新运行 NetBeans。鉴于这是本机代码问题,您还应该指出您正在运行的操作系统和版本。
  • 该库文件夹中有哪些文件?
  • 我在 C:\OpenCv 运行 OpenCv 提取器并没有收到任何错误消息,所以我猜我正在使用:w8.1 pro、NetBeans IDE 8.0.2、OpenCv300

标签: java opencv netbeans


【解决方案1】:

Step 1 获取依赖walker应用程序。

步骤 2 浏览到相关的库文件夹。

第 3 步查看缺少的内容并获取它。

提示:

确保为您的架构获得 32 位或 64 位的 DLL。

确保根据您提供的 DLL 使用正确的 java(32 位/64 位)进行编译。

最后,如果您缺少的依赖项以 MSVCP***.dll 下载 Microsoft Visual C++ Packages 开头。再次关心架构。我建议您从这一步开始。

【讨论】:

  • dependency walker 告诉我一些文件丢失了,但我什至不知道它们是什么:/ 我无法理解的是,在教程中我在库上运行它并且它有效而在我的项目中却没有。
  • 为你的架构安装 c++ 可视化包,90% 的情况都解决了问题
【解决方案2】:

终于解决了我的问题,事实是我打了电话

System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

为时已晚,所以我稍微移动了一下并解决了这个问题 :) 感谢所有花点时间帮助我的人!

【讨论】:

  • “移动了一点”是什么意思?上面的电话是new Mat() 还是你必须把它移到别处?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
  • 1970-01-01
  • 2017-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多