2013-05-26 4 views
-2

Я буду признателен, если кто-то скажет мне, что означает эта строка кода на C++, что он делает?В чем смысл этого кода на C++

temp = ((uchar*) matimg.data + i)[j]; 

в этом блоке кода

int rows =(int) height; 
int cols =(int) width; 
Mat matimg(img); 

vector<vector<double> > vec1(rows, vector<double>(cols)); 
int k =1; 
for (int i=0; i < rows; i++) { 
    for (int j =0; j < cols; j++){ 
     unsigned char temp; 
     temp = ((uchar*) matimg.data + i)[j]; 
     vec1[i][j] = (double) temp; 
    } 

} 

P.S. Я не говорю C++, я говорю C#

+4

Есть ли определенная его часть, которую вы не понимаете? Например. вы понимаете умножение, добавление и индексирование массива, или вам это нужно объяснить? – Barmar

ответ

3

Это перекрывающий массив 1D matimg.data с числом matimg.step -spaced 2D матриц, а затем практически индексировать его на (j, k).

+0

«Наложение массива 1D matimg.data на число matimg.step», в чем смысл этой части? или не могли бы вы рассказать мне, как я могу написать эту единственную строку кода на C#? – user2421617

+0

Если структуры данных совпадают, тогда вы будете писать почти точно так же. Просто убедитесь, что у вас есть массив байтов. –

+0

Спасибо! Я пробовал это, но я получил ошибку, Operator '+' не может быть применен к операндам типа 'int []' и 'int'. Все в порядке. Я каким-то образом выясню это. – user2421617

0

Если это помогает, вы можете также переписать это выражение в виде

((uchar*) matimg.data)[ i * matimg.step + j * matimg.elemSize() + k ] 

Первоначальная формулировка является более ясной, о своем намерении в доступе к данным, но, возможно, эта формулировка является более ясной, чтобы продемонстрировать, как вы бы сделать C# переписать.

Смежные вопросы