Как перебрать матрицу cvMat в JavaCV?

У меня есть IplImage, который я преобразовал в матрицу, и теперь я хочу перебирать ячейку за ячейкой.

CvMat mtx = new CvMat(iplUltima);
for (int i = 0; i < 100; i++) {
     //I need something like mtx[0][i] = someValue;
}

person gal007    schedule 17.05.2012    source источник
comment
это может вам помочь: stackoverflow.com/questions /9920449/   -  person Larry Cinnabar    schedule 18.05.2012
comment
Спасибо! Но в примере итерируйте FloatBuffer, а не CvMat. Что, если мне нужно присвоить значение позиции матрицы?   -  person gal007    schedule 18.05.2012


Ответы (3)


Я СДЕЛАЛ ЭТО!! Я разделяю это:

CvMat mtx = new CvMat(iplUltima);   

for (int i = 0; i < 100; i++) {
    for (int j = 0; j < 100; j++) {
         opencv_core.cvSet2D(mtx, i, j, CvScalar.ONE);
    }
}
iplUltima = new IplImage (mtx); 

Где я = строка и j = столбец

person gal007    schedule 18.05.2012
comment
Скажите, пожалуйста, как изменить его на CvScalar.RED или что-то еще, что означает 0-255. Я сделал это, но не изменил его на зеленый или красный цвет, какой я хочу - person GPrathap; 22.11.2014
comment
Привет! Извиняюсь! Я больше никогда не возвращался к программам с этой технологией, поэтому мало что помню. Однако я помню хорошую книгу: books.google.com.ar/ - person gal007; 22.11.2014
comment
Спасибо, буду разбираться - person GPrathap; 23.11.2014

Во-первых, вам нужно импортировать из JavaCV следующее:

импортировать com.googlecode.javacv.cpp.opencv_core.CvMat;

импортировать статический com.googlecode.javacv.cpp.opencv_core.CV_32F;

Основная программа:

int rows = 2;
int cols = 2;

CvMat Tab = CvMat.create( rows, cols, CV_32F );

// Manually fill the table
Tab.put(0, 0, 1);
Tab.put(0, 1, 2);
Tab.put(1, 0, -3);
Tab.put(1, 1, 4);

// Iterate through its elements and print them 
for(int i=0;i<rows;i++){
   for (int j =0;j<cols;j++){
    System.out.print(" "+ Tab.get(i,j) );
    }
   System.out.println("\n");
}
person VaSko    schedule 26.01.2014

У меня не установлена ​​Java, я не могу проверить это решение, но я думаю, что оно должно работать нормально.

CvMat mtx = new CvMat(iplUltima);
val n     = mtx.rows * mtx.cols * mtx.channels

for (i <- 0 until n) {
    // Put your pixel value, for example 200
    mtx.put(i, 200)
}

Здесь приведена ссылка на доступ к пикселям в javaCV.

person Larry Cinnabar    schedule 18.05.2012
comment
Спасибо @Innuendo! Но это не сработало. Я опубликую ответ через несколько минут, я сделал это!!! - person gal007; 18.05.2012