2013-02-08 58 views
2

我开始使用openCV和JavaCV,并尝试检测图像上的形状。我想检测圈子。我有一个图像作为位图(只有这样)。我读过,首先我需要把我的图像作为IplImage,然后将其转换为灰度并平滑边缘。好了,我开始做这样的事情:因为第一我的形象是作为位图我创建的IplImage的对象(我应该指出,一切都在按下按钮后happing):Android上的OpenCV和JavaCv - 在图像上检测形状

IplImage image = new IplImage(); 

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

bitmap.copyPixelsToBuffer(image.getByteBuffer()); 

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

---编辑---- 我再次尝试。现在我不使用Project-> properties-> Java Built Path - > ...添加jar,但是我在'lib'文件夹中设置了jar。但是当我创建IplImage类的对象时,仍然一切都崩溃了。有人知道为什么吗?在我的lib文件夹中,我有:android-support-v4.jar,javacpp.jar,javacv.jar,opencv库 - 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检测形状(圆圈),有人可以推荐一个好的教程吗?

+0

什么是你所得到的例外呢?你能粘贴LogCat输出吗? – iTech 2013-02-08 22:38:11

回答

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

+0

好的。所以我试图设置:IplImage image = IplImage.create(100,100,8,4);.但是应用程序被捣毁,日志是:02-08 23:57:36。745:E/AndroidRuntime(4734):引起:java.lang.NoClassDefFoundError:com.googlecode.javacv.cpp.opencv_core $ IplImage。我有导入:import static com.googlecode.javacv.cpp.opencv_core。*;所以我不记得发生了什么。 – Ziva 2013-02-08 22:59:50

+0

确保您具有所有必需的导入*,另外*为常量的静态导入,例如: import com.googlecode.javacv.cpp.opencv_core。*; 此外,请确保您的应用程序具有所有必需的罐子。 – iTech 2013-02-08 23:02:44

+0

我正在寻找,在哪里我忘记了一些事情,但我无法找到。我添加所有罐子:javacv.jar,javacpp.jar,javacv-android-arm,havacv-linux-x86_64。我也importet类:import static com.googlecode.javacv.cpp.opencv_core。*; import static com.googlecode.javacv.cpp.opencv_imgproc.IplConvKernel; import static com.googlecode.javacv.cpp.opencv_imgproc.IplConvKernelFP; import static com.googlecode.javacv.cpp.opencv_core.IplImage。*; import static com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;但它仍然不起作用。 – Ziva 2013-02-09 00:07:16