如何从OpenCV返回图像并以Android Java代码显示?

sri*_*san 5 android opencv image image-processing

我正在尝试使用本机代码中的OpenCV lib(即在Android应用程序的jni文件夹中)绘制一个形状,并调用本机方法将图像返回到Java代码并显示它.

怎么做?我找不到使用OpenCV的Android的简单应用程序.我也设置了环境,使用OpenCV为Android提供的示例如cvcamera,校准运行正常.他们使用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);
    }
}
Run Code Online (Sandbox Code Playgroud)

而在本土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;
}
Run Code Online (Sandbox Code Playgroud)

我使用ndk-build编译了本机代码..so文件也创建并安装,没有任何错误.在Java代码中也没有任何错误.

当我在AVD中运行应用程序时,我只能查看黑屏,并在几秒钟内消失.

代码中有什么错误?

如果SWIG是强制性的,那么它是如何完成的?我对OpenCV和SWIG知之甚少.

Sam*_*det 5

您可以改用JavaCV.它提供了对Java中OpenCV的完全访问权限.不需要JNI,SWIG或NDK ......

http://code.google.com/p/javacv/