【发布时间】:2012-03-22 08:51:13
【问题描述】:
我正在开发一个使用 OpenCV 的面部检测 Android 应用程序 2.3.1 库。我找到了一些代码,可以让我在上面拍照 我的三星 GT-P1000 并将其保存在图库中。然后我想选择 画廊中的图像允许 .cpp 文件使用 OpenCV 职能。这需要位图到 IplImage 的转换(.java 和.cpp代码sn-ps在下面添加)。
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;
}
但是我需要另一个 JNIEXPORT 函数来转换 IplImage 到位图数据。因此将使用最后 4 行代码。应填充 imageData,以便 BitmapFactory 可以对其进行解码。我遇到了大量示例,这些代码 sn-ps 也来自这些示例。但是我无法为我的问题找到解决方案。有人有什么建议吗?
【问题讨论】:
标签: android opencv bitmap java-native-interface