【问题标题】:OpenCV and JavaCv on Android - detect shape on imageAndroid 上的 OpenCV 和 JavaCv - 检测图像上的形状
【发布时间】:2013-02-09 19:34:30
【问题描述】:

我开始使用 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 类的对象时,一切仍然崩溃。有人知道为什么吗?

--编辑-- 在我的 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();everything 就可以了。也许我可以使用 Imgproc 检测形状(圆形),有人可以推荐一个好的教程吗?

【问题讨论】:

  • 您遇到的异常是什么?你能粘贴 LogCat 的输出吗?

标签: android opencv javacv


【解决方案1】:

您可以按如下方式直接创建图像:

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

【讨论】:

  • 好的。所以我尝试设置:IplImage image = IplImage.create(100, 100, 8, 4);。但是应用程序崩溃了,日志是:02-08 23:57:36.745: E/AndroidRuntime(4734): Caused by: java.lang.NoClassDefFoundError: com.googlecode.javacv.cpp.opencv_core$IplImage。我有进口:进口静态com.googlecode.javacv.cpp.opencv_core.*;所以我不明白发生了什么。
  • 确保你有所有必需的导入,除了常量静态导入,例如:import com.googlecode.javacv.cpp.opencv_core.*;此外,请确保您的应用拥有所有必需的 jar。
  • 我正在搜索,我忘记了一些东西,但我找不到。我添加了所有 jar:javacv.jar、javacpp.jar、javacv-android-arm、havacv-linux-x86_64。我还 importet 类:import static com.googlecode.javacv.cpp.opencv_core.*;导入静态 com.googlecode.javacv.cpp.opencv_imgproc.IplConvKernel;导入静态 com.googlecode.javacv.cpp.opencv_imgproc.IplConvKernelFP;导入静态 com.googlecode.javacv.cpp.opencv_core.IplImage.*;导入静态 com.googlecode.javacv.cpp.opencv_core.IPL_DEPTH_8U;但是还是不行。
  • 我改变了一点。现在我没有通过 Project->Properties->Java Built Path->... 添加 jars 但我只是将所有 jars 设置在文件夹“lib”中。但它仍然崩溃
猜你喜欢
  • 1970-01-01
  • 2016-12-06
  • 1970-01-01
  • 2017-04-22
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多