我刚刚开始使用OpenCVSharp,并且试图将一些OpenCV示例程序转换为C#。我不确定如何从squares.cpp转换此行:gray = gray0 >= (l + 1) * 255 / N;
这行给出了错误
gray
和gray0
都是Mat
实例。 l
和N
是int
。
最佳答案
首先,了解表达式的作用很重要。
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/