1
我正在使用OpenCV 2.3.1库的FaceDetect Android应用程序。我找到了一些代码,可以让我在 上制作我的三星GT-P1000的照片并将其保存在图库中。然后我想从图库中选择 ,它允许.cpp文件使用OpenCV 函数。这需要一个位图到IplImage的转换(下面添加.java 和.cpp代码片段)。将IplImage显示为Android位图
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行代码将被使用。应该填充imageData以便BitmapFactory可以解码它。我遇到了很多示例,这些代码片段也来自这些代码片段。然而,我无法找到解决我的问题的方法。有没有人有一些建议?
代码没有测试 – zhijie 2012-03-22 10:13:33