我刚刚开始使用OpenCVSharp,并且试图将一些OpenCV示例程序转换为C#。我不确定如何从 squares.cpp 转换此行:
gray = gray0 >= (l + 1) * 255 / N;
此行显示错误
运算符'> ='不能应用于类型'Mat'和'int'OpenCVSharpTest的操作数
gray
和gray0
都是Mat
实例。 l
和N
是int
。
答案 0 :(得分:1)
首先,了解表达式的作用很重要。
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)
,这是matrix expression,它对标量的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将许多C ++ API运算符映射到Mat
类的成员函数中。具体来说,Mat.GreaterThanOrEqual
似乎与所使用的运算符匹配。
替代的C ++函数cv::threshold
映射到Mat.Threshold
。在这种情况下,您将需要使用阈值方法THRESH_BINARY
,并且由于它是>
而不是>=
,因此您需要适当地补偿阈值。
答案 1 :(得分:0)
您也可以尝试使用 https://www.tangiblesoftwaresolutions.com/product_details/cplusplus_to_csharp_converter_details.html
免费软件,最多可转换100行。