Мой вопрос основан на следующем коде.
Vec4b *rv = mMat.ptr<Vec4b> (50);
Я не понимаю, что означает Vec4b. Я знаю о Vec4i, что означает координаты отрезка. Так же я пытался найти то, что в нем содержится.
Код ниже
std::cout<<rv[1]<<std::endl;
дал вывод:
[8, 7, 10, 10]
Я не знаю, что означают эти параметры. Удивительно, но он показал результаты для параметров больше четырех. Например, RV [4], RV [5] и так далее.
Так Я действительно не понимаю, что делает Vec4b. Также mMat.ptr. Я не смог найти хорошие онлайн-источники о Vec4b и Mat.ptr.
Любое разъяснение о том, что делает первый код, будет действительно полезно для моего сознания.
Так что я действительно не понимаю, что делает Vec4b.
Как видно из API OpenCV, это определяется следующим образом:
template<typename _Tp, int n> class Vec : public Matx<_Tp, n, 1> {...};
...
typedef Vec<uchar, 4> Vec4b;
Другими словами, он содержит 4 uchar
(unsigned char
) ценности. Vec
класс обычно используется для описания типов пикселей многоканальных массивов, например, CV_RGBA
,
Также mMat.ptr.
Mat::ptr()
возвращает указатель на указанную строку матрицы.
Итак, для вашего кода,
Vec4b *rv = mMat.ptr<Vec4b> (50);
После этого, rv
будет указатель с типом Vec4b
что указывает на 51
-й ряд Mat mMat
,
Редактировать: Это все Mat
Данные непрерывны после всех пикселей текущей строки, например, используя большой индекс в rv[index]
(за index >= mMat.cols
), вы получите данные из других строк.
Других решений пока нет …