我正在编写一个 C++ dll,它将在 Java 代码中使用。我的一些方法具有 OpenCV 对象类型的返回值,例如cv::Mat
, cv::Rect
, cv::RotatedRect
。我可以cv::Mat
通过以下代码返回。但我不知道如何返回cv::Rect
or cv::RotatedRect
,可以说自定义对象类型。
JNIEXPORT jlong JNICALL Java_tr_com_imageprocessing_ImageProvider_grabImage0(JNIEnv *env, jobject obj)
{
if(mat != nullptr) // this is satisfied if memory is already allocated and not deleted
{
delete mat;
mat = nullptr;
}
mat = new cv::Mat(imageProvider.grabImage());
return (jlong)mat;
}
在上面的代码中mat
并被imageProvider
声明为全局变量。
任何帮助,将不胜感激。提前致谢。
编辑
下面的代码可以吗?
再次声明 rect
为 shapeProvider
全局变量。
JNIEXPORT jlong JNICALL Java_tr_com_provus_impro_ShapeProvider_rect0(JNIEnv *env, jobject obj)
{
if(rect != nullptr) // this is satisfied if memory is already allocated and not deleted
{
delete rect;
rect = nullptr;
}
rect = new cv::Rect(shapeProvider.rect());
return (jlong)rect;
}