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

时间:2019-05-07 17:18:45

标签: c# opencv opencvsharp

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

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

此行显示错误

  

运算符'> ='不能应用于类型'Mat'和'int'Op​​enCVSharpTest的操作数

graygray0都是Mat实例。 lNint

2 个答案:

答案 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 BA cmpop alphaalpha 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行。