我开始使用openCV和JavaCV,并尝试检测Image上的形状。我想检测圈子。我有一个图像作为位图(并且只有这样)。我已经读过,首先我需要将Image作为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类的对象时,一切仍然崩溃。有人知道为什么吗?
- 编辑 -
在我的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;
}
}
当我开始我的 Activity 时,它崩溃了,并且记录了日志:
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来检测形状(圆形),有人可以推荐一个好的教程吗? 最佳答案
您可以直接创建图像,如下所示:
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
关于android - Android上的OpenCV和JavaCv-检测图像形状,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14782455/