Прежде всего, важно понять, что делает выражение.
cv::Mat gray0; // Somehow this is populated with a grayscale image
int N = 11;
for( int l = 1; l < N; l++ ) {
cv::Mat gray = gray0 >= (l + 1) * 255 / N;
// more processing
}
В выражении используется MatExpr operator>= (const Mat &a, double s)
, то есть матричное выражение , выполняющеевекторизованное сравнение Mat
со скаляром.
Сравнение: A cmpop B
, A cmpop alpha
, alpha cmpop A
, где cmpop
является одним из >
, >=
,==
, !=
, <=
, <
.Результатом сравнения является 8-битная одноканальная маска, элементы которой установлены на 255 (если конкретный элемент или пара элементов удовлетворяют условию) или 0.
В основном:
for all (x,y) in the image:
threshold = (l + 1) * 255 / N
if (gray0(x,y) >= threshold):
gray(x,y) = 255
else
gray(x,y) = 0
Это в основном операция порогового значения, ее можно легко перевести на использование функции cv::threshold
.
Кажется, что OpenCVSharp отображаетмногие операторы API C ++ входят в функции-члены класса Mat
.В частности, Mat.GreaterThanOrEqual
, похоже, соответствует используемому оператору.
Альтернативная функция C ++ cv::threshold
отображается на Mat.Threshold
.В этом случае вам нужно будет использовать метод порогового значения THRESH_BINARY
, и, поскольку он имеет значение >
, а не >=
, вам необходимо соответствующим образом сместить порог.