我試圖用jlong
通過JNI函數傳遞一個Mat
對象,但我在運行時得到此異常:通行證墊JNI函數 - OpenCV的
(__gnu_cxx::__verbose_terminate_handler()+276)
(__cxxabiv1::__terminate(void (*)())+8)
(std::terminate()+20)
(__cxa_throw+148)
(cv::error(cv::Exception const&)+80)
(cv::Mat::copySize(cv::Mat const&)+18)
(cv::Mat::Mat(cv::Mat const&)+122)
(cv::_InputArray::getMat(int) const+252)
(cv::split(cv::_InputArray const&, cv::_OutputArray const&)+20)
(cv::split(cv::Mat const&, std::vector<cv::Mat, std::allocator<cv::Mat> >&)+28)
(cv::xphoto::balanceWhite(cv::Mat const&, cv::Mat&, int, float, float, float, float)+54)
(Java_com_myapp_camera_CameraManager_simpleWhiteBalance+18)
本地函數的定義如下
public native static void simpleWhiteBalance(Mat source, Mat dest);
並且它通過以下方式
#include <jni.h>
#include <opencv2/core/core.hpp>
#include "opencv2/xphoto.hpp"
#include "simple_color_balance.cpp"
#include "com_myapp_camera_CameraManager.h"
JNIEXPORT void JNICALL Java_com_myapp_camera_CameraManager_simpleWhiteBalance
(JNIEnv *, jclass, jlong in, jlong out) {
cv::Mat& inMat = *(cv::Mat*)in;
cv::Mat& outMat = *(cv::Mat*)out;
cv::xphoto::balanceWhite(inMat, outMat, cv::xphoto::WHITE_BALANCE_SIMPLE);
}
我實現對C++來說是新的,異常是什麼意思?
謝謝,解決了通過長對象通過Mat.getNativeObjAddress() – 2015-02-11 10:05:23