私はOpenCV 2.3.1ライブラリを使用しているfacedetect Androidアプリケーションで作業しています。私は 私のサムスンGT - P1000の写真を作ってギャラリーに保存できるいくつかのコードを見つけました。次に、.cppファイルがOpenCV 機能を使用できるようにギャラリーからの画像を に選択します。これには、ビットマップからIplImageへの変換が必要です(.java と.cppコードスニペットが下に追加されています)。AndroidビットマップとしてIplImageを表示
は、Javaコードは次のようになります。
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;
}
は、しかし、私は、ビットマップデータにIplImageへ を変換し、別のJNIEXPORT機能を必要とします。そのため、最後の4行のコードが使用されます。 BitmapFactoryでデコードできるように、imageDataを埋め込む必要があります。私はサンプルを読み込みました。これらのコードスニペットも同様です。しかし私は私の問題の解決策を見つけることができません。誰か提案がありますか?
コードテストされていません – zhijie