我刚刚开始使用OpenCVSharp,并试图将一些OpenCV示例程序转换为C#。我不知道如何从squares.cpp转换这一行
gray = gray0 >= (l + 1) * 255 / N;
这一行给出了错误
运算符'>=‘不能应用于'Mat’和'int‘OpenCVSharpTest类型的操作数
gray和gray0都是Mat实例。l和N是int。
发布于 2019-05-07 23:45:13
首先,理解表达式的作用是很重要的。
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。
基本上:
对于图像中的所有(x,y):阈值= (l + 1) * 255 /N如果(gray0(x,y) >=阈值):gray(x,y) =255个其他灰色(x,y) =0
这基本上是一个阈值操作,可以很容易地转换为使用cv::threshold函数。
OpenCVSharp似乎将许多C++ API操作符映射到Mat类的成员函数中。具体来说,Mat.GreaterThanOrEqual似乎与所使用的运算符相匹配。
可选的C++函数cv::threshold映射到Mat.Threshold。在这种情况下,您将需要使用阈值方法THRESH_BINARY,因为它可以实现>而不是>=,因此需要适当地抵消阈值。
https://stackoverflow.com/questions/56027610
复制相似问题