线程" main"中的例外情况java.lang.Error:使用JNA和OpenCV进行无效的内存访问

时间:2016-01-20 15:19:39

标签: java c++ opencv jna

我有两个部分的应用程序。一部分是用于opencv计算的c ++程序。另一部分是Java部分。我使用JNA控制相机,并使用OpenCV编辑本相机的图片。 我可以用JNA调用我的函数。

我在C ++中的功能

extern "C" __declspec(dllexport) int createScript(char* imagePath)

在此功能中,我调用函数

void BladeCutter::calcMeanValues(cv::Mat image)
{
    std::vector<cv::Mat> bgr_planes;
    cv::split(image, bgr_planes);
    cv::Scalar blue = cv::mean(bgr_planes[0]);
    cv::Scalar green = cv::mean(bgr_planes[1]);
    cv::Scalar red = cv::mean(bgr_planes[2]);
    meanValues.scalar = cv::Scalar(blue[0], green[0], red[0]);
    meanValues.brightness = calcBrightness(image);
}

并在cv :: split获取无效的内存访问权限(image,bgr_planes); 如果我在没有jna的情况下调用程序,程序运行正常。

Exception in thread "main" java.lang.Error: Invalid memory access
  at com.sun.jna.Native.invokePointer(Native Method)
  at com.sun.jna.Function.invokePointer(Function.java:477)
  at com.sun.jna.Function.invokeString(Function.java:658)
  at com.sun.jna.Function.invoke(Function.java:402)
  at com.sun.jna.Function.invoke(Function.java:323)
  at com.sun.jna.Library$Handler.invoke(Library.java:236)
  at com.sun.proxy.$Proxy0.createScript(Unknown Source)
  at de.test.BladeTileLocator.main(BladeTileLocator.java:14)

BladeTileLocator是Java-Class。

package de.test;

import com.sun.jna.Native;

import de.interfaces.IBladeTileLocator;

public class BladeTileLocator {

    public static void main(String[] args) {

        final byte[] ba = new byte[50];
        final IBladeTileLocator bladeTileLocator = (IBladeTileLocator) Native.loadLibrary("BladeTileLocator", IBladeTileLocator.class);
        final String path = "C:\\Users\\bak\\Pictures\\Bildanalyse\\Bild.JPG";
        bladeTileLocator.createScript(path);
    }
}

我的JNA接口调用函数:

package de.interfaces;

import com.sun.jna.Library;

public interface IBladeTileLocator extends Library {
    int createScript(String imagePath);
}

0 个答案:

没有答案