如何将 "Mat >= int" 语句从 C++ 转换为 C#
How to convert "Mat >= int" statement from c++ to C#
我刚开始使用 OpenCVSharp,我正在尝试将一些 OpenCV 示例程序转换为 C#。我不确定如何从 squares.cpp:
转换这条线
gray = gray0 >= (l + 1) * 255 / N;
这一行报错
Operator '>=' cannot be applied to operands of type 'Mat' and 'int' OpenCVSharpTest
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)
, which is a matrix expression 执行 Mat
与标量的矢量化比较。
Comparison: A cmpop B
, A cmpop alpha
, alpha cmpop A
, where cmpop
is one of >
, >=
, ==
, !=
, <=
, <
. The result of comparison is an 8-bit single channel mask whose elements are set to 255 (if the particular element or pair of elements satisfy the condition) or 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
class 的成员函数中。具体来说,Mat.GreaterThanOrEqual
似乎与使用的运算符匹配。
替代 C++ 函数 cv::threshold
映射到 Mat.Threshold
。在这种情况下,您将需要使用阈值方法 THRESH_BINARY
,并且由于它 >
而不是 >=
您将需要适当地偏移阈值。
您也可以尝试使用
https://www.tangiblesoftwaresolutions.com/product_details/cplusplus_to_csharp_converter_details.html
最多可转换100行的免费软件。
我刚开始使用 OpenCVSharp,我正在尝试将一些 OpenCV 示例程序转换为 C#。我不确定如何从 squares.cpp:
转换这条线gray = gray0 >= (l + 1) * 255 / N;
这一行报错
Operator '>=' cannot be applied to operands of type 'Mat' and 'int' OpenCVSharpTest
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)
, which is a matrix expression 执行 Mat
与标量的矢量化比较。
Comparison:
A cmpop B
,A cmpop alpha
,alpha cmpop A
, wherecmpop
is one of>
,>=
,==
,!=
,<=
,<
. The result of comparison is an 8-bit single channel mask whose elements are set to 255 (if the particular element or pair of elements satisfy the condition) or 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
class 的成员函数中。具体来说,Mat.GreaterThanOrEqual
似乎与使用的运算符匹配。
替代 C++ 函数 cv::threshold
映射到 Mat.Threshold
。在这种情况下,您将需要使用阈值方法 THRESH_BINARY
,并且由于它 >
而不是 >=
您将需要适当地偏移阈值。
您也可以尝试使用 https://www.tangiblesoftwaresolutions.com/product_details/cplusplus_to_csharp_converter_details.html
最多可转换100行的免费软件。