Как преобразовать оператор "Mat> = int" из c ++ в C # - PullRequest
1 голос
/ 07 мая 2019

Я только начал использовать OpenCVSharp и пытаюсь преобразовать некоторые примеры программ OpenCV в C #.Я не уверен, как преобразовать эту строку из squares.cpp :

gray = gray0 >= (l + 1) * 255 / N;

Эта строка выдает ошибку

Оператор '> =' нельзя применить к операндам типа 'Mat' и 'int'. OpenCVSharpTest

gray и gray0 являются экземплярами Mat.l и N являются int.

Ответы [ 2 ]

1 голос
/ 08 мая 2019

Прежде всего, важно понять, что делает выражение.

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, и, поскольку он имеет значение >, а не >=, вам необходимо соответствующим образом сместить порог.

0 голосов
/ 08 мая 2019

Вы также можете попробовать использовать https://www.tangiblesoftwaresolutions.com/product_details/cplusplus_to_csharp_converter_details.html

бесплатное программное обеспечение для до 100 строк преобразования.

...