Android上的OpenCV和JavaCv - 检测图像上的形状

时间:2013-02-08 22:34:41

标签: android opencv javacv

我开始使用openCV和JavaCV,我尝试在我的Image上检测形状。我想检测圈子。我有一个图像作为位图(只有像这样)。我已经读过,首先我需要将我的图像作为IplImage,然后将其转换为灰度并平滑边缘。好的,所以我开始做这样的事情:因为首先我的图像是我创建IplImage对象的位图(我应该提到按下按钮后一切都在徘徊):

IplImage image = new IplImage();

然后我将我的位图转换为IplImage:

bitmap.copyPixelsToBuffer(image.getByteBuffer());

我应该知道让其他人思考,但我不能,因为按下按钮应用程序崩溃后的第一行:IplImage image = new IplImage(); 我试图使用其他构造函数,如:IplImage image = new IplImage(size);但它也没有用。如果有人可以帮我,我应该怎么做(我的意思是创建IplImage并将位图转换为IplImage),我将非常感激。

--- ---- EDIT 我再试一次。现在我不是使用Project-> properties-> Java Built Path->添加jar ...但是我在'lib'文件夹中设置了jar。但是当我想要创建IplImage类的对象时,一切都崩溃了。有人知道为什么吗?

- EDIT-- 在我的lib文件夹中,我有:android-support-v4.jar,javacpp.jar,javacv.jar,opencv library - 2.4.3.jar。 我的Activity类:

import com.googlecode.javacv.cpp.opencv_core.IplImage;

import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        IplImage image = new IplImage();

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

} 当我开始活动时,它会崩溃并记录日志:

02-09 12:18:59.207: E/AndroidRuntime(7652): Caused by: java.lang.UnsatisfiedLinkError: Library jniopencv_core not found
02-09 12:18:59.207: E/AndroidRuntime(7652):     at java.lang.Runtime.loadLibrary(Runtime.java:461)
02-09 12:18:59.207: E/AndroidRuntime(7652):     at java.lang.System.loadLibrary(System.java:557)
02-09 12:18:59.207: E/AndroidRuntime(7652):     at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:448)
02-09 12:18:59.207: E/AndroidRuntime(7652):     at com.googlecode.javacpp.Loader.load(Loader.java:372)
02-09 12:18:59.207: E/AndroidRuntime(7652):     at com.googlecode.javacpp.Loader.load(Loader.java:319)
02-09 12:18:59.207: E/AndroidRuntime(7652):     at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136)
02-09 12:18:59.207: E/AndroidRuntime(7652):     ... 19 more

我可以提一下,如果我试图定义Imgproc img = new Imgproc();一切正常。也许我可以使用Imgproc检测形状(圆圈),有人可以推荐一个好的教程吗?

1 个答案:

答案 0 :(得分:2)

您可以直接创建图像,如下所示:

IplImage image = IplImage.createFrom(bitmapBuffer);

IplImage image = IplImage.create(width, height, IPL_DEPTH_8U, 4); // Change the parameter as you need
bitmap.copyPixelsToBuffer(image.getByteBuffer());

或者将图像直接加载到LplImage对象

IplImage image = cvLoadImage("image.png");

修改

See this question,它应该可以解决您的错误。

根据您的错误,您似乎没有在libs文件夹中包含OpenCV的本机库(例如libjniopencv_core.so)。

按照说明指南正确安装和使用库以及README.txt文件

See this question