我刚刚开始使用OpenCVSharp,并且试图将一些OpenCV示例程序转换为C#。我不确定如何从squares.cpp转换此行:
gray = gray0 >= (l + 1) * 255 / N;
这行给出了错误


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) ,它是对Mat与标量进行矢量化比较的matrix expression



基本上:



这基本上是一个阈值操作,可以轻松转换为使用 cv::threshold 函数。

似乎OpenCVSharp将许多C++ API运算符映射到Mat类的成员函数中。具体来说, Mat.GreaterThanOrEqual 似乎与所使用的运算符匹配。

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

关于c# - 如何将 “Mat >= int”语句从C++转换为C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56027610/

10-16 22:50