OpenCV Android 앱이 있습니다. 그 코드의 대부분은 Java이지만, 나는 에있는 함수 중 하나입니다. 이 함수는 Mat 객체를 가져 와서 새로운 것을 반환합니다.OpenCV에서 원시 코드에서 Java로 Mat 객체 반환하기
제 질문은 어떻게 원시 코드에서 Java로 매트를 반환합니까? 예를 찾을 수 없습니다.
감사합니다.
OpenCV Android 앱이 있습니다. 그 코드의 대부분은 Java이지만, 나는 에있는 함수 중 하나입니다. 이 함수는 Mat 객체를 가져 와서 새로운 것을 반환합니다.OpenCV에서 원시 코드에서 Java로 Mat 객체 반환하기
제 질문은 어떻게 원시 코드에서 Java로 매트를 반환합니까? 예를 찾을 수 없습니다.
감사합니다.
오늘은 원시 코드에서 Mat를 반환해야했습니다. "튜토리얼 2 고급 - 2. Mix Java + Native OpenCV"로 시작하여 이미 두 개의 매트 (카메라에서 캡처 한 이미지) 객체를 원시 코드로 전달합니다. 하지만 추출 된 특징을 반환하고 싶었 때문에 내가 서명에 jlong addrDescriptor
추가 :
extern "C" {
JNIEXPORT void JNICALL Java_org_opencv_samples_tutorial4_Sample4View_FindFeatures(JNIEnv* env, jobject thiz, jlong addrGray, jlong addrRgba, jlong addrDescriptor)
{
Mat* pMatGr=(Mat*)addrGray;
Mat* pMatRgb=(Mat*)addrRgba;
Mat* pMatDesc=(Mat*)addrDescriptor;
vector<KeyPoint> v;
//OrbFeatureDetector detector(50);
OrbFeatureDetector detector;
OrbDescriptorExtractor extractor;
detector.detect(*pMatGr, v);
extractor.compute(*pMatGr, v, *pMatDesc);
circle(*pMatRgb, Point(100,100), 10, Scalar(5,128,255,255));
for(size_t i = 0; i < v.size(); i++) {
circle(*pMatRgb, Point(v[i].pt.x, v[i].pt.y), 10, Scalar(255,128,0,255));
}
}
}
을 자바 부분에서 나는 매트
private Mat descriptor;
descriptor = new Mat();
트릭을 수행 getNativeObjAddr()
방법을 추가했습니다. 매트는 자바로 할당되고 주소는 네이티브 코드로 전달되므로 명시 적으로 반환되지 않습니다.
FindFeatures(mGraySubmat.getNativeObjAddr(), mRgba.getNativeObjAddr(), descriptor.getNativeObjAddr());
Log.i("desc:" , descriptor.dump());
매트는 필요한 데이터로 채워졌으며 JNI 호출이 반환 된 후 Java 코드에서 직접 액세스 할 수 있습니다. 매트가 해제 코드에서 다른
Somwhere :
if (descriptor != null)
descriptor.release();
descriptor = null;
안녕 스태커이 내 네이티브 코드를 변경 : 매트 * 이미지 = (마 *) addrDescriptor; \t 매트 처리 (* image.size(), CV_8UC3); \t cv :: medianBlur (* image, processing, 5); 이제 다음과 같은 오류 메시지가 나타납니다. jni/objDetector.cpp : 23 : 오류 : 'image'의 'image'멤버 'size'요청 (비 클래스 유형 임) 'Cv :: Mat * –
@SaqibRazaq 서명이 void입니다. medianBlur (const Mat & src, Mat & dst, int ksize)'처리를 참조하여 호출해야합니다. '& processing'을 시도하십시오. 아니면'Mat & processing (image.size(), CV_8UC3);으로 정의한다. – stacker
@SaqibRazaq'Mat & dst'를 반환하려면 자바 코드에서 선언하고 JNI 메소드의 호출에 추가해야한다. 당신이'이미지'를 추가 한 것과 같은 방식으로. – stacker