我开始使用 openCV 和 JavaCV,并尝试检测图像上的形状。我想检测圆圈。我有一个图像作为位图(并且只有这样)。我已经读过,首先我需要将我的图像作为 IplImage,然后将其转换为灰度并平滑边缘。好的,所以我开始做这样的事情:因为首先我的图像是位图,我创建了一个 IplImage 对象(我应该提到按下按钮后一切都在发生):
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 类的对象时,一切仍然崩溃。有人知道为什么吗?
--EDIT-- 在我的 lib 文件夹中,我有:android-support-v4.jar、javacpp.jar、javacv.jar、opencv 库 - 2.4.3.jar。我的活动课:
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 检测形状(圆形),有人可以推荐一个好的教程吗?