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知之甚少.