Поиск значения в векторе OpenCV

Я не могу найти в документации какую-либо реализацию, которая покажет, как я могу получить индексы значений в векторе (матрица 1d), которые имеют совпадающие значения. Ближайший пример:

Mat b;
Mat a = b == 5;

Так что это должно дать мне матрицу логических значений. И тогда я могу использовать его для извлечения индексов значений, равных 5. Есть ли более эффективный способ? Он должен отправлять все значения в векторе в графический процессор параллельно, а затем возвращать индекс единственного (или первого) значения, равного 5. И это не должно быть чем-то из структуры "алгоритма", например:

std::find(...);

Интересуют только параллельные графические решения.

1 ответ

Решение

Это может быть легко сделано преобразованием сокращения.

Сначала вы преобразуете согласованный векторный элемент в его индекс, а несопоставленные элементы - в большое число, скажем, векторный размер.

Затем на этапе редукции вы найдете минимум, который является индексом первого соответствующего элемента в массиве.

Это алгоритм O(log(n)), и он может эффективно выполняться графическим процессором.

Вы можете реализовать это либо с помощью тяги, либо написав собственное ядро.

https://thrust.github.io/doc/group__transformed__reductions.html

Другие вопросы по тегам