OpenCV 2.3.1 라이브러리를 사용하는 facedetect Android 응용 프로그램에서 작업하고 있습니다. 나는 내 삼성 GT-P1000 에 사진을 찍어 갤러리에 저장하는 코드를 발견했다. 그런 다음 갤러리에서 이미지를 선택하여 .cpp 파일에서 OpenCV 기능을 사용할 수 있도록 이미지를 으로 선택합니다. 이를 위해서는 비트 맵에서 IplImage 변환이 필요합니다 (.java 및 .cpp 코드 스 니펫이 아래에 추가됩니다).IplImage를 Android 비트 맵으로 표시
자바 코드는 다음과 같다 :
Bitmap bitmap = BitmapFactory.decodeFile(mCurrentImagePath);
Log.i(TAG, mCurrentImagePath);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int[] pixels = new int[width * height];
bitmap.getPixels(pixels, 0, width, 0, 0, width, height);
opencv.setSourceImage(pixels, width, height);
byte[] imageData = opencv.getSourceImage();
bitmap = BitmapFactory.decodeByteArray(imageData, 0,
imageData.length);
mImageView.setImageBitmap(bitmap);
은 C++ 코드는 다음과 같다 :가
IplImage * pImage = NULL;
IplImage * loadpixels(int * pixels, int width, int height);
IplImage * getIplImageFromIntArray
(JNIEnv* env, jintArray array_data, jint width, jint height);
JNIEXPORT jboolean JNICALL Java_org_opencv_example_pruts_Test1OpenCV_setSourceImage
(JNIEnv * env, jobject thiz, jintArray photo_data, jint width, jint height)
{
if(pImage != NULL)
{
cvReleaseImage(&pImage);
pImage = NULL;
}
pImage = getIplImageFromIntArray(env, photo_data, width, height);
if(pImage == 0)
{
return 0;
}
return 1;
}
그러나 I 비트 맵 데이터에 IplImage 변환 다른 JNIEXPORT 기능을 필요 . 따라서 마지막 4 줄의 코드가 사용됩니다. BitmapFactory가 이미지 데이터를 디코딩 할 수 있도록 imageData를 채워야합니다. 예제로드가 있었고 이러한 코드 조각도 예제에서 나온 것입니다. 그러나 나는 내 문제에 대한 해결책을 찾을 수 없다. 누구 제안이 있습니까?
코드를 테스트하지 – zhijie