2013-02-08 88 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