У меня есть некоторые процедуры, работающие с OpenCV Mat. Это один из них:
void drawCircles(Mat& image, const Mat points, Scalar color)
{
// fix format of Matrix <-> hard coding
//MatInfo(points);
//getchar();
CV_Assert(points.channels() == 2);
//CV_Assert(points.depth() == CV_32FC2); // this is so restricted!!
//CV_Assert(points.channels() == 2);
//CV_Assert(points.depth() == CV_16UC2);
// added working for both row/col point vector
Point2d p0;
for (int i = 0; i < points.cols; i++)
{
//p0.x = cvRound(points.at<Vec2i>(0,i)[0]);
//p0.y = cvRound(points.at<Vec2i>(0,i)[1]);
p0.x = cvRound(points.at<Vec2f>(0,i)[0]);
p0.y = cvRound(points.at<Vec2f>(0,i)[1]);
//p0.x = cvRound(points.at<Vec2d>(0,i)[0]);
//p0.y = cvRound(points.at<Vec2d>(0,i)[1]);
circle(image, p0, 5, color, 2, 8);
}
}
который используется для рисования кругов на изображении в заданных точках.
У меня все в порядке с доступом к элементу Мата с помощью matrixA.at(i,j). Впрочем, это так специфично. Когда тип элемента матрицы отличается, функция не может работать. Можно ли в этом случае написать своего рода шаблонную функцию?? который не зависит от типа элемента Mat??
Спасибо
Редактировать01:
если это что-то вроде
template <class T>
void drawCircles(Mat_<T> img, const Mat points, Scalar cl)
{
..
img.at<T>() = something;
..
}
тогда было бы идеально. Но я выполнил поиск в документах OpenCV и не думаю, что это поддерживается OpenCV MAT. Или я упускаю какие-то моменты?
Edit02: Это моя попытка:
template <class Type>
void drawCircles(Mat& image, const Mat_<Vec<Type, 2> > points, Scalar color)
{
for (int i = 0; i < points.cols; i++)
{
p0.x = cvRound(points.at<Vec<Type, 2>>(0,i)[0]);
p0.y = cvRound(points.at<Vec<Type, 2>>(0,i)[1]);
circle(image, p0, 5, color, 2, 8);
}
}
и я называю это с помощью:
drawCircles(frame, Points, Scalar(255, 255, 255));
где Очки:
Mat Points = Mat(1, 5, CV_32FC2, 0);
Все равно не получается :(
Point2d roundedElement(mat,row,col)
, которая проверяет тип матрицы, использует соответствующий методat<T>
для этого типа, а затем возвращает округленный результат. Это звучит правильно? - person Vaughn Cato   schedule 16.12.2012points
, а затем вызвать drawCircles(img,Mat_‹U›(points),c1), где U является подходящим типом. - person Vaughn Cato   schedule 16.12.2012