如何将 "Mat >= int" 语句从 C++ 转换为 C#

How to convert "Mat >= int" statement from c++ to C#

我刚开始使用 OpenCVSharp,我正在尝试将一些 OpenCV 示例程序转换为 C#。我不确定如何从 squares.cpp:

转换这条线

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

这一行报错

Operator '>=' cannot be applied to operands of type 'Mat' and 'int' OpenCVSharpTest

graygray0 都是 Mat 实例。 lNint

首先,了解表达式的作用很重要。

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), which is a matrix expression 执行 Mat 与标量的矢量化比较。

Comparison: A cmpop B, A cmpop alpha, alpha cmpop A, where cmpop is one of >, >=, ==, !=, <=, <. The result of comparison is an 8-bit single channel mask whose elements are set to 255 (if the particular element or pair of elements satisfy the condition) or 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 将许多 C++ API 运算符映射到 Mat class 的成员函数中。具体来说,Mat.GreaterThanOrEqual 似乎与使用的运算符匹配。

替代 C++ 函数 cv::threshold 映射到 Mat.Threshold。在这种情况下,您将需要使用阈值方法 THRESH_BINARY,并且由于它 > 而不是 >= 您将需要适当地偏移阈值。

您也可以尝试使用 https://www.tangiblesoftwaresolutions.com/product_details/cplusplus_to_csharp_converter_details.html

最多可转换100行的免费软件。