Java 不满意的链接错误:org.opencv.highgui.highgui.imread处理图像时

Java 不满意的链接错误:org.opencv.highgui.highgui.imread处理图像时,java,opencv,unsatisfiedlinkerror,imread,highgui,Java,Opencv,Unsatisfiedlinkerror,Imread,Highgui,我在尝试运行代码时遇到了不满意的链接错误。所以我把这两个类打包到一个.jar中 Brightness插件 package brightness.copy; import interfaces.IEnhancementOption; import plugins.IEnhancementPlugin; import window.EditImageWindow; public class BrightnessPlugin implements IEnhancementPlugin {

我在尝试运行代码时遇到了不满意的链接错误。所以我把这两个类打包到一个.jar中

Brightness插件

package brightness.copy;

import interfaces.IEnhancementOption;
import plugins.IEnhancementPlugin;
import window.EditImageWindow;  

public class BrightnessPlugin implements IEnhancementPlugin
{
    public EditImageWindow editWindow;

    @Override
    public String getName() 
    {
        return "Brightness";
    }

    @Override
    public IEnhancementOption getEnhacement(EditImageWindow editWindow) 
    {
        return new BrightnessEnhancement(editWindow);
    }  

}
亮度增强

package brightness.copy;

import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.ImageData;
import org.eclipse.swt.widgets.Composite;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.highgui.Highgui;

import widget.edit.enhancement.AEnhancementOption;
import window.EditImageWindow;

public class BrightnessEnhancement extends AEnhancementOption 
{

public EditImageWindow editWindow;

public BrightnessEnhancement(Composite parent) 
{

    super(parent);
    this.editWindow = (EditImageWindow) parent;
}

@Override
public void initialize() 
{
    setEnhancementName("Brightness");
    this.getButton().addSelectionListener(this);
}

@Override
public void widgetSelected(SelectionEvent e) 
{
    double alpha = 1;
    double beta = 31;
    try{
         System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
         Mat source =  Highgui.imread(editWindow.getImagePath(),Highgui.CV_LOAD_IMAGE_COLOR);
         Mat destination = new Mat(source.rows(),source.cols(),

         source.type());
         source.convertTo(destination, -1, alpha, beta);
         Highgui.imwrite("temp/brightness.jpg", destination);

         ImageData imgData = new ImageData("temp/brightness.jpg");  
         editWindow.setImageData(imgData);
         editWindow.getImageEditor().reCallPicture(imgData);
         editWindow.setEffect("brightness");
      }catch (Exception error) 
    {
         System.out.println("error: " + error.getMessage());
      }

}

@Override
public void widgetDefaultSelected(SelectionEvent e) {
    // TODO Auto-generated method stub
}
}

然后,当我尝试在图片中实现亮度增强时,出现了错误UnsatifiedLinkError

以下是实现增强功能的代码:

Properties loadProp = new Properties();

    List<IEnhancementPlugin> plugins = PluginManager.getEnhancementPlugins();
    for (IEnhancementPlugin p : plugins)
    {   
        try {
            FileInputStream in = new FileInputStream("Plugins/Enhancement/" + p.getName()+ ".properties");
            loadProp.load(in);
            in.close();
            if(loadProp.getProperty("active").equals("true"))
            {
                addEnhancementOption(p.getEnhacement(this));
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
截图如下: 我按下按钮时出错了

我读过其他帖子,其中一个解决方案说添加System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME);我已经添加了代码,但问题仍然存在。如果有人能解决这个问题,我将不胜感激。谢谢大家!

附言。 1.若我并没有把它们放进罐子里,它就可以工作,但我需要它们都可以从罐子里装入。
2.如果从.jar加载函数addEnhancement,则当包在项目中时,它也可以工作。

System.loadLibrary(Core.NATIVE\u LIBRARY\u NAME)表示您正在尝试加载本机库,即.dll(Windows)或.so(Linux)。但该库必须可用,即它必须存在于系统中,并且位于标准路径(例如Windows上的“/Windows/System32”)、本机库的定义基本路径(通过
-Djava.library.path提供)
-请参见Nicolas的注释)或路径必须是绝对路径(例如“C:/yourapp/somelib.dll”)
NATIVE\u LIBRARY\u NAME
表示常量仅包含文件名。您是否设置了-Djava.LIBRARY.path,以便java应用程序可以访问您的库?顺便说一句,复制某些类,因为它们在运行时找不到,这很可能不是最好的方法。相反,您应该将库(即.jar以及任何本机库)放在类路径上,这很可能是文档中的某个地方描述的。@nicolasfilloto是的,我已经设置了java.library.path。我想问题出在这行Mat source=>Highgui.imread(editWindow.getImagePath(),Highgui.CV\u LOAD\u IMAGE\u COLOR);
 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:316)
        at brightness.copy.BrightnessEnhancement.widgetSelected(BrightnessEnhancement.java:39)
        at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
        at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
        at window.AWindow.show(AWindow.java:22)
        at widget.listimage.ListImage.handleEvent(ListImage.java:74)
        at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
        at window.AWindow.show(AWindow.java:22)
        at main.Main.main(Main.java:10)