эффективная замена для m2 = (m1 == v) для cv :: UMat? - PullRequest
1 голос
/ 16 мая 2019

Я получил следующий код (пример) для создания маски, которая использует cv: Mat:

int v;
cv::Mat m1; // being a submat
cv::Mat mask = (m1==v);

Эти строки получены из прототипа Python

mask = np.where( m1[x1:x2,y1:y2]==v, 255, 0 );

В версии c ++ я хотел бы использовать UMat вместо Mat, потому что вокруг этой одной строки имеется больший конвейер обработки. К сожалению, мне кажется, что MatExpressions (например, m1==v выше) не реализованы для cv :: UMat в OpenCV3.4.1. Это правильно?

Есть ли в cv :: UMat операции, с помощью которых я мог бы эффективно имитировать mask=(m1==v) для получения той же маски?
Мой текущий код (преобразование из UMat в Mat, то есть копирование из графической памяти в главную память и затем выполнение операции cv :: Mat) неэффективен.

с использованием c ++ 11, gcc5.4.0, opencv3.4.1

NB. Вопрос не в возможных разных значениях в маске между Python и версией c ++.

...