需要建议:处理来自相机的彩色图像;人造人;开放简历;NDK;C++
Need an advice: Processing color image from camera; Android; OpenCV; NDK; C++
我想对从安卓设备相机捕获的图像的预览进行一些预处理。
我可以这样描述我的应用程序的外壳:
1.) 爪哇部分。
// 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图像的处理。有人可以给我一个建议,以正确的方式做这件事吗?我做了几次尝试:
- 在图像处理功能内部将 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;
}
相关文章:
- 难以理解某些人解决IOI问题的源代码
- 最烦人的解析甚至更令人烦恼
- C++ 为每个结构{人}条目创建文件
- 程序输入名称和高度并显示它。我不知道如何显示列表中最高人的姓名和身高
- 提取狮身人面像文档中的C++代码片段
- C++重载解析总是诉诸别名 arg. 而不是其他人作为对所有人都有效的 arg.
- 我的随机生成器是否不工作,或者我决定人/骨架是否击中对手的方式是否有错误
- 计算有多少人执行我的C++应用程序
- 寻找C++吃得最少的人
- 'note: 候選人: Volume& Volume::operator=(const Volume&)'.这个错误是什么?
- 使 Windows 10 讲述人说出一些文本
- 人脸识别:每个人的所有图像都必须相同吗?
- Qt - 找不到正确的发件人()
- 如何使用C++共享目录,以便每个人都可以访问
- 需要二人补码的 C++20 的后果
- 为什么我的布尔人不断出现否而不是是或否
- 如何使用口袋狮身人面像通过代码中的麦克风进行语音识别
- 人造人.NDK.如何记录全局变量的调用析构函数
- 人造人.NDK.OpenGLES2.神秘地无法绘制
- 需要建议:处理来自相机的彩色图像;人造人;开放简历;NDK;C++