2014-02-16 75 views

回答

2

對不起,不瞭解Java,但可以提出一般邏輯。在C++ OpenCV的,我們做了2 for loops如下:

matObject.create(array.rows, array.cols, CV_8UC1); // 8-bit single channel image 

for (int i=0; i<array.rows; i++) 
{ 
    for(int j=0; j<array.cols; j++) 
    { 
     matObject.at<uchar>(i,j) = array[i][j]; 
    } 
} 

讓我知道這是否是你查詢..

+0

什麼是matObject.at (I,J)=陣列[i] [j]的選擇;在JAVA中?我找不到任何東西。 – Rabbir

+0

對不起,我不知道java ...但它只是訪問位置(i,j)處的像素的一種方法,這是圖像處理中的基本事情,所以應該非常容易。在'matObject.at (i,j)= array [i] [j];',我們只是在'(i,j)'處訪問圖像的像素並在該位置放置一個值。 PS:不要忘了做適當的類型轉換。如果存儲在數組中的值是整型,那麼'matObject.at (i,j)=(uchar)array [i] [j];' – skm

+0

非常感謝您的幫助.. :) – Rabbir

0

是matObject關鍵字或這意味着我們有墊的名字來代替圖片? 例如,如果我已將圖像定義爲:

Mat inputImage = imread(「C:\ Documents and Settings \ user \ My Documents \ My Pictures \ Images \ imageName.jpg」);

那麼我應該把inputImage而不是matObject?

4

大概就像這將工作:

float trainingData[][] = new float[][]{ new float[]{501, 10}, new float[]{255, 10}, new float[]{501, 255}, new float[]{10, 501} }; 
Mat trainingDataMat = new Mat(4, 2, CvType.CV_32FC1);//HxW 4x2 
for (int i=0;i<4;i++) 
     trainingDataMat.put(i,0, trainingData[i]); 

代碼是自我解釋:你有「TrainingData」陣列中的數據,而你分配新墊目標。然後你使用「put」方法來推動行。

0

使用可以使用Mat的put方法。 代碼

int[][] intArray = new int[][]{{2,3,4},{5,6,7},{8,9,10}}; 
Mat matObject = new Mat(3,3,CvType.CV_8UC1); 
for(int row=0;row<3;row++){ 
    for(int col=0;col<3;col++) 
     matObject.put(row, col, intArray[row][col]); 
} 
0

使用到

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 
    Mat array= Highgui.imread("java.png" ,CvType.CV_8UC1); 
    Mat matObject = new Mat(); 
    matObject.create(array.rows(), array.cols(),CvType.CV_8UC1); 

    for (int i=0; i<array.rows(); i++) 
    { 

     for(int j=0; j<array.cols(); j++) 
     { 

      matObject.put(i, j, array.get(i, j)); 

     } 
    } 

    Highgui.imwrite("java2.jpg", matObject);