2013-02-26 45 views
2
ImageManipulationsActivity.VIEW_MODE_BINARY: 
capture.retrieve(mRgba, Highgui.CV_CAP_ANDROID_COLOR_FRAME_RGBA); 

Mat binary = new Mat(); 
Imgproc.cvtColor(mRgba,binary, Imgproc.COLOR_RGBA2GRAY, 4); 

int size = (int) binary.total() * binary.channels(); 
double[] buff = new double[size]; 
binary.get(0, 0, buff); 

for(int i = 0; i < size; i++) 
{ 
    buff[i] = (buff[i] >= 0) ? 1 : 0; 
} 

Mat bv = new Mat(binary.size(), CvType.CV_8U); 
bv.put(0, 0, buff); 

Imgproc.cvtColor(binary, mRgba, Imgproc.COLOR_GRAY2RGBA, 4); 

break; 

上面的代碼是用於opencv4android二值化灰度圖像,但直到知道那不是爲我工作,我在上面的代碼複製從here,在上面的代碼中,我嘗試:用什麼默認類型墊圖像OpenCV4Android?

  1. Retrive墊圖片:使用Imgproc.cvtColor
  2. capture.retrieve
  3. 轉換圖像爲灰度
  4. 二值化用Java原始陣列等上面的代碼
  5. 然後轉換從灰回RGBA
  6. 使用位圖顯示結果bmp

如果您有什麼建議,請告訴我。我不知道我從上面的代碼中弄錯了什麼,它沒有錯誤,但是當我安裝應用程序並運行它時,它始終強制關閉。

這是從應用程序的logcat:

致命異常:螺紋10 java.lang.UnsupportedOperationException:無光澤數據類型不兼容:0在org.opencv.core.Mat.get(Mat.java:2042 )at org.opencv.samples.imagemanipulations.ImageManipulationsView.processFrame(ImageM anipulationsView.java:158)at org.opencv.samples.imagemanipulations.SampleCvViewBase.run(SampleCvViewBase.java:99)at org.opencv.samples.imagemanipulations .ImageManipulationsView.run(ImageManipulati onsView.java:195)at java.lang.Thread.run(Thread.java:1019)

+0

這是什麼語言? – Niko 2013-02-26 13:28:16

+0

opencv for android – baharsan 2013-02-26 21:54:14

+0

還有一個在C++中的threshold()函數,在java中也是如此。 – berak 2013-02-26 22:25:49

回答

2

Mat的默認類型是CV_8UC1無論單通道還是3通道(BGR)-Basic Structure OpenCV-

+0

這就解決了你的問題怎麼樣?沒有解釋。 – 2014-10-06 18:09:51

相關問題