2012-12-28 54 views
3

這是我的代碼,我正在閱讀的圖像rectangle.jpg/sdcard。我想知道像素值(正常,以及RGB格式)。我應該用什麼代碼來處理它?如何讀取OpenCV中來自Mat對象m的RGB值的每個像素的值

package com.idag.edge; 

import android.os.Bundle; 
import android.os.Environment; 
import android.app.Activity; 
import android.util.Log; 
import android.widget.TextView; 

import org.opencv.android.OpenCVLoader; 
import org.opencv.core.Mat; 
import org.opencv.highgui.Highgui; 

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     try 
     { 
      String path=Environment.getExternalStorageDirectory().getAbsolutePath() +"/rectangle.jpg"; 
      Mat m=Highgui.imread(path,1); 
      Log.i("Paramenres on matrix", "height "+ m.height()+" width "+ m.width()+" total = "+m.total()+" channels " +m.channels()); 

      System.out.println("element at 0 0 = "+ m.row(0).col(0).nativeObj+" element at 150 150 = "+ m.row(150).col(150).nativeObj); 
     } 

     catch(Exception e){ 
      System.err.print("Error in the code"); 
      Log.i("Error in imread", "Error in imread"); 
     } 
    } 

} 
+0

我寫過「我從/ sdcard讀取圖像rectangle.jpg」,它現在存儲在m,大小爲圖像尺寸寬度x高度的Mat變量中。我希望存儲在m中每個像素中的值。 – deep

+0

...所以,你還沒有嘗試過任何東西?你來這裏期待我們給你寫完整的代碼並準備好去? – Eric

+0

我已經嘗試過所有提到的問題,它在你面前,除了從m中提取值。我很困惑像素值和我得到的navtiveObj值是相同還是不同。 – deep

回答

7

Mat.get(x, y) - 返回所有的信道值中的(X,Y)的陣列,在不同的地方每個信道。如果你的圖像是RGB,所以你會得到一個[r,g,b]的數組。

Mat.put(x, y, value) - 將通道值設置爲(x,y)爲value

double[] rgb = image.get(0, 0); 
Log.i("", "red:"+rgb[0]+"green:"+rgb[1]+"blue:"+rgb[2]); 
image.put(0, 0, new double[]{255, 255, 0});//sets the pixel to yellow 
0

在OpenCV中使用的函數是double[] Mat::get(int row, int col)