【发布时间】:2011-07-21 01:22:29
【问题描述】:
我正在尝试使用本机代码中的 OpenCV 库(即在 Android 应用程序的 jni 文件夹中)绘制一个形状,并调用本机方法将图像返回到 Java 代码并显示它。
如何做到这一点?我找不到使用 OpenCV 的简单 Android 应用程序。我也设置了环境,使用 OpenCV(如 cvcamera)为 Android 提供的示例,校准运行良好。他们将 SWIG 用于 JNI 接口。 SWIG 是强制性的吗?我没有使用 SWIG。我尝试了很多,现在仍在尝试。
在Java中,代码是这样的:
public class HelloJni extends Activity
{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new ShapeView(this));
}
static {
System.loadLibrary("hello-jni");
}
}
class ShapeView extends View
{
private Bitmap mBitmap;
private static native Object drawingShape();
public ShapeView(Context context) {
super(context);
}
protected void onDraw(Canvas canvas) {
mBitmap = (Bitmap) drawingShape();
canvas.drawBitmap(mBitmap, 0, 0, null);
}
}
而在原生 jni 类中,
#include "ShapeView.h"
#include <string.h>
#include <jni.h>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
JNIEXPORT jobject JNICALL Java_ShapeView_drawingShape
(JNIEnv *env, jclass obj) {
IplImage* img = cvCreateImage(cvSize(300, 300), IPL_DEPTH_8U, 3);
cvRectangle(img, cvPoint(100, 100), cvPoint(200, 200), cvScalar(255, 0, 0), 1);
cvCircle(img, cvPoint(100, 100), 20, cvScalar(0, 255, 0), 1);
return (jobject)img;
}
我使用 ndk-build 编译了本机代码。 .so 文件还创建并 安装没有任何错误。在Java代码中也没有任何错误。
当我在 AVD 中运行应用程序时,我只能看到一个黑屏,它会在几秒钟内消失。
代码有什么错误?
如果 SWIG 是强制性的,怎么做?我对 OpenCV 和 SWIG 了解不多。
【问题讨论】:
标签: android image image-processing opencv