2013-04-30 6 views
4

Я не уверен, существует ли в OpenCV (C++) функция для этого.Функция карты в OpenCV C++

Я хочу вызвать пользовательскую определенную функцию для каждого пикселя cv :: Mat в OpenCV, и весь результат должен быть сохранен в матрице.

Могу ли я сделать это в одной строке кода (что-то похожее на функцию карты в Python)?

ответ

6

Я не пробовал это, но в соответствии с docs существуют STL итераторов стиля для доступа к элементам матрицы:

// compute sum of positive matrix elements, iterator-based variant 
double sum=0; 
MatConstIterator_<double> it = M.begin<double>(), it_end = M.end<double>(); 
for(; it != it_end; ++it) 
    sum += std::max(*it, 0.); 

Если они выполнены правильно, вы должны быть в состоянии использовать их с станд :: for_each примерно так

std::for_each(M.begin<double>(), M.end<double>(), [](double& e) { /* do something with e */ }); 
+0

Ваш лямбда должен иметь «double & e' в качестве параметра. Использование 'double' будет делать копию и не присваивать данные изображения. – Aurelius

+0

@Aurelius Исправлено, спасибо. – Sarien

+0

Это выглядит неплохо. Интересно, можем ли мы сделать это для целой строки вместо пикселя; – garak

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