I am using OpenCV4Android for a project which involves both Java as well as C++ code. I am finding keypoints in an image using FAST feature detector using OpenCV's Java API. I need to pass its output (set of keypoints) which is a MatofKeypoint object in Java to a native C++ method. In the C++ method I need to use it as vector so that I can extract Keypoint descriptors form it.
I passed MatofObject form java and received it as a Mat& in C++, then manually tried to convert Mat& to vector by manually reading each point as described here. But the program crashes every time I access the received Mat& object with fatal signal 11,code 1.
I suspect the problem is due to difference in data structures used by C++ and Java API.
Any help will be appreciated, Thankyou!!!
In Java
public native void processImage(long matAddrTemplateKeypoints); // Native Method definition
FeatureDetector detector = FeatureDetector.create(FeatureDetector.FAST);
MatOfKeyPoint templateKeypoints = new MatOfKeyPoint();
detector.detect(img1, templateKeypoints);
processImage(templateKeypoints.getNativeObjAddr()); // Native method Call
In C++
JNIEXPORT void JNICALL MainActivity_processImage(JNIEnv*, jobject, jlong matAddrTemplateKeypoints)
Mat& templateKeypointMat = *(Mat*) matAddrTemplateKeypoints; // Casting received MatofPoint object as a Mat&
for(int i=0;i<templateKeypointMat.rows; i++){ // Code crashes here
...
}