Как получить доступ к элементам по строке, col в новом классе «Мат» OpenCV 2.0? Документация связана ниже, но я не смог ее понять. http://opencv.willowgarage.com/documentation/cpp/basic_structures.html#matДоступ к матричному элементу в объекте «Мат» (а не объекте CvMat) в OpenCV C++
ответ
На документации:
http://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#mat
Он говорит:
(...), если вы знаете, матричный элемент типа, например, это поплавок, то вы можете использовать в <> метод
То есть(), вы можете использовать:
Mat M(100, 100, CV_64F);
cout << M.at<double>(0,0);
Может быть, проще использовать Mat_
класс. Это оболочка шаблона для Mat
. Mat_
имеет перегруженный operator()
, чтобы получить доступ к элементам.
OCV выходит из своего пути, чтобы убедиться, что вы не можете этого сделать, не зная тип элемента, но если вы хотите легко поддающийся кодированию, но не очень эффективный способ прочитать его тип-агностически, вы можете использовать что-то например
double val=mean(someMat(Rect(x,y,1,1)))[channel];
Для этого нужно знать тип. Метод at <> является безопасным способом, но прямой доступ к указателю данных обычно выполняется быстрее, если вы делаете это правильно.
Представленные выше идеи хороши. Для быстрого доступа (в случае, если вы хотели бы сделать реальное применение времени) вы можете попробовать следующее:
//suppose you read an image from a file that is gray scale
Mat image = imread("Your path", CV_8UC1);
//...do some processing
uint8_t *myData = image.data;
int width = image.cols;
int height = image.rows;
int _stride = image.step;//in case cols != strides
for(int i = 0; i < height; i++)
{
for(int j = 0; j < width; j++)
{
uint8_t val = myData[ i * _stride + j];
//do whatever you want with your value
}
}
доступ Pointer гораздо быстрее, чем> Доступ к Mat.at <. Надеюсь, поможет!
Стоимость доступа к указателю точно такая же, как Mat.at <> (при компиляции в версии). Единственное отличие - утверждает, что они активны, если код не скомпилирован в режиме отладки. –
Основываясь на том, что @J. Кальеха сказал, у вас есть два варианта
Произвольный доступ
Если вы хотите случайного доступа к элементу из матового, просто использовать
at<data_Type>(row_num, col_num) = value;
Непрерывный доступ
Если вы хотите непрерывного доступа , OpenCV обеспечивает матричный итератор, совместимый с итератором STL
MatIterator_<double> it, end;
for(it = I.begin<double>(), end = I.end<double>(); it != end; ++it)
{
//do something here
}
или
for(int row = 0; row < mat.rows; ++row) {
float* p = mat.ptr(row); //pointer p points to the first place of each row
for(int col = 0; col < mat.cols; ++col) {
*p++; // operation here
}
}
одолжить картину из блоге в Dynamic Two-dimensioned Arrays in C
- 1. Как получить доступ к элементу в объекте?
- 2. Доступ к массиву в объекте
- 3. не может получить доступ к любому элементу в объекте
- 4. Доступ к значениям, хранящимся в объекте C++
- 5. Большие данные в резюме :: Мат или CvMat *
- 6. Доступ к элементам в объекте
- 7. Доступ к свойствам в объекте C
- 8. Переприсвоить к Мат в OpenCV
- 9. Доступ к методу SpringBoardServices.h в объекте-c?
- 10. Доступ к многомерным массивам в объекте-c
- 11. Как получить доступ к этому числовому элементу в объекте SimpleXML?
- 12. D3 пытается получить доступ к элементу vis в объекте json
- 13. Как я могу получить доступ к элементу в объекте jquery?
- 14. Доступа к матричному элементу с помощью матрицы [(а, б), в] вместо матрицы [а, b, c]
- 15. Доступ к данным в многомерном объекте JSON
- 16. Доступ к объекту jQuery в другом объекте
- 17. Доступ к многоканальному элементу OpenCV (C++)
- 18. Доступ к элементу массива в OpenCV
- 19. Доступ к скрипту на другом объекте. C#
- 20. Доступ к матричному элементу numpy с использованием списка неизвестной длины
- 21. Не удается получить доступ к объектам в объекте-c
- 22. Доступ к элементам массива в объекте сеанса
- 23. Доступ к объекту из объекта в объекте
- 24. cvMat изображение в OpenCV
- 25. Доступ к динамическому ключу в объекте javascript
- 26. Доступ к объекту экземпляра в объекте экземпляра
- 27. Java: доступ к полям в загруженном объекте
- 28. Константа в объекте-c
- 29. Доступ к сеансу в объекте домена
- 30. Как получить доступ к элементам Cvmat * в opencv
Как установить определенное значение для некоторого определенного индекса М? – damned
@sumit Метод at <>() возвращает ссылку на элемент.Вы можете использовать: M.at (0, 0) = значение; –
Я почти уверен, что этот пример ошибочен. Я полагаю, что это делает небезопасный листинг внутри, поэтому использование с помощью double на матрице uint приведет к нежелательным/искаженным результатам. Предлагаем коррекцию. – Catskul