有没有人尝试在Android上使用libccv?我无法在线找到任何示例代码,并且想知道如何使用CCV在Android应用中实现跟踪器。
这包括: - 从Android设备相机处理图像 - 在设备屏幕上显示由CCV处理的图像
答案 0 :(得分:1)
我最近实施了类似的东西。为实现这一目标,我使用OpenCV设置了一个Android JNI项目,并使用OpenCV摄像头读取功能来存储帧。然后,可以将指向帧数据的指针传递给CCV图像包装器,以便与CCV库函数一起使用。 CCV具有最小的依赖性,最简单的启动和运行方式是在项目的JNI目录中包含所需模块的源代码。
要使用OpenCV设置项目,您可以关注this tutorial. OpenCV SDK有一个简单的相机阅读器示例项目。 Android GitHub页面包含一个示例HelloJNI项目here,该项目展示了如何使用JNI使用Java和C / C ++设置Android项目。然后可以将CCV源添加到C / C ++源目录中,以便您的C / C ++函数可以访问库。
使用OpenCV库和JNI功能设置项目后,需要使用OpenCV保存帧数据并将其指针传递给C代码。将每个帧存储为Mat
对象,然后可以将Mat
对象传递给您的C / C ++代码:(请注意,这只是显示所需关键代码段的摘录)
package your.namespace.here;
import org.opencv.core.Core;
import org.opencv.core.Mat;
public class MainActivity{
// Store frames in this object for later processing
Mat frame;
static {
// Load the c file name with JNI bindings, e.g. here we load test.c
System.loadLibrary("test");
}
// Declare the JNI function wrapper
public native int ccvTest( long input, long output);
// OpenCV methods here to store the frame, see
// OpenCV4Android - tutorial-1-camerapreview for full
// code description.
//...
// This function to be called after each frame is stored.
// output can then be converted to Bitmap and displayed in ImageView
// or used for further processing with OpenCV.
public Mat processFrame(){
Mat output = new Mat();
ccvTest(frame.getNativeObjAddr(), output.getNativeObjAddr());
return output;
}
}
使用HelloJNI模板,调用一个CCV库函数的示例C文件(对于此示例,我们称之为test.c)将如下所示:
#include <string.h>
#include <jni.h>
#ifdef __cplusplus
extern "C" {
#endif
// ccv files to include should be compiled using c compiler
#include "ccv/lib/ccv.h"
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL
Java_your_namespace_here_MainActivity_ccvTest( JNIEnv* env,
jobject thiz,
jlong input, jlong output)
{
Mat* in_p = (Mat*)input;
Mat* out_p = (Mat*)output;
Mat &rgb = *in_p;
ccv_dense_matrix_t* image = 0;
// Pass the Mat data to the CCV Image wrapper
ccv_read(rgb.data, &image, CCV_IO_BGR_RAW | CCV_IO_ANY_RAW | CCV_IO_GRAY, rgb.rows, rgb.cols, rgb.step[0]);
// Now the Mat is in ccv image format, you can pass
// the image pointer to any ccv function you like.
//
// Put your calls to CCV library here..
//
}
#ifdef __cplusplus
}
#endif
项目的树结构可能看起来与此类似,所有ccv源都在jni / ccv文件夹中:
此设置非常有用,因为它允许您连接OpenCV和CCV的功能。希望这会有所帮助。