Доступ к нескольким каналам в OpenCV Mat

Что такое синтаксис для доступа к i-й строке channel :: n многоканальной матрицы. Я могу получить доступ (i, j) к элементу channel :: n, но каков синтаксис для использования таких функций, как row, rowRange, …..

Образец кода:

Mat M(10, 3, CV_32SC3);
cout << M.at<Vec3d>(0,0)[1] << endl;  // This works
cout << M.row(0)[1] << endl;    // Syntax of this

1

Решение

Я думаю, что вы ищете следующее:

 cv::Mat M(10, 3, CV_32SC3);
cv::Mat_<cv::Vec3d> helpimg = M;
helpimg .row(0).begin()[0][0] = 2.5;

Я могу скомпилировать это, но я не проверял это. Скажите, если это работает. Вы также можете использовать его для получения значений cols:

 helpimg .col(0).begin()[0][0] = 4.5;
2

Другие решения

Mat.row(0) returns a Mat, so it's the same game as before:

// if it's really INT 3channels(like your ex. above), you have to use m.at<Vec3i> !!
Mat M(10, 3, CV_32SC3);

// 3rd row
Mat r = m.row(3);

// r has only 1 row (3 elems), last pixel there
cout<< r.at<Vec3i>(0,2)[0];
4

Как насчет этого:

 cout << M.row(0).col(1) << endl;

Mat::row функция возвращает Mat, так что вы можете позвонить либо row или же col снова на результат, чтобы получить нужную вам строку или столбец.

1
По вопросам рекламы [email protected]