gpt4 book ai didi

java - 需要建议 : Processing color image from camera; Android; OpenCV; NDK; C++

转载 作者:行者123 更新时间:2023-11-28 02:52:23 25 4
gpt4 key购买 nike

我想对从 Android 设备相机捕获的图像进行一些预处理。

我可以这样描述我的应用程序的骨架:

1.) Java 部分。

    // Getting preview from camera.
public void onPreviewFrame(byte[] arg0, Camera arg1) {
if (imageFormat == ImageFormat.NV21) {
frameData = arg0; // private byte[] frameData = null;
}
}
// ...
// After some code - call native function.
ImageProcessing(width, height, frameData, output); // private int[] output= null;
// Setting output to bitmap, etc...
MyCameraPreview.setImageBitmap(bitmap); // Dislplay, etc...

2.) C++ 部分。图像处理

extern "C"
jboolean huge_prefix_ImageProcessing(
JNIEnv* env,
jobject thiz,
jint width,
jint height,
jbyteArray frameData,
jintArray output)
{
jbyte* pFrameData = env->GetByteArrayElements(frameData, 0);
jint* pOutput = env->GetIntArrayElements(output, 0);

Mat gray(height, width, CV_8UC1, (unsigned char *)pFrameData);
// Some processing and writing gray to result.
// ...
return true;
}

一切都适用于灰度图像。但现在我需要对 RGB 图像进行处理。有人可以给我以正确方式做这件事的建议吗?我做了几次尝试:

  • 在 ImageProcessing 函数内部将 pFrameData 转换为 rgb 格式(来自 nv21)。
  • 在 onPreviewFrame 函数中,将 nv21 更改为 RGB_565,并对图像容器进行其他更改。

最佳答案

你试过这样的事情吗? (从您的 JNI 包装器调用)

void convertYUV( int width, int height, jbyteArray yuvArray ) {

// Get the data from JEnv.
signed char *data = JNIEnvInfo::getInstance()->getJNIEnv()->GetByteArrayElements(yuvArray, 0);

// Convert to Mat object.
Mat imgbuf(Size(width,height), CV_8UC4, (unsigned char*) data);
Mat img = imdecode(imgbuf, CV_LOAD_IMAGE_COLOR);

//
// Release the JNI data pointer.
JNIEnvInfo::getInstance()->getJNIEnv()->ReleaseByteArrayElements(yuvArray, (jbyte*) yuvArray, 0);

// ... do stuff with the Mat ..

}



Mat convertRGB(int width , int height , jintArray rgb8888)
{

//
int *rgb;
int i;

//
// Get the data from JEnv.
int *data = JNIEnvInfo::getInstance()->getJNIEnv()->GetIntArrayElements(rgb8888, 0);

//
// Copy the data.
for(i = 0; i < width * height; i++ ) {
rgb[i] = data[i];
}

//
// Convert to mat object.
Mat imgbuf(Size(width,height), CV_8UC3, rgb);
Mat img = imdecode(imgbuf, CV_LOAD_IMAGE_COLOR);

//
// Release the JNI data pointer.
JNIEnvInfo::getInstance()->getJNIEnv()->ReleaseIntArrayElements(rgb8888, (jint*) rgb8888, 0);

return img;
}

关于java - 需要建议 : Processing color image from camera; Android; OpenCV; NDK; C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22752555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com