无法将代码从Python转换为c#

无法将代码从Python转换为c#,c#,python,numpy,opencv,opencvsharp,C#,Python,Numpy,Opencv,Opencvsharp,解决方案:我正在检测护照的MRZ。我有一个策略,但由于缺乏文档,我无法转换以下代码行。我的项目使用OpenCvSharp和NumSharp,这是numpy到c#的一个端口。任何帮助都将不胜感激 Python代码: gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # smooth the image using a 3x3 Gaussian, then apply the blackhat # morphological operator to fi

解决方案:我正在检测护照的MRZ。我有一个策略,但由于缺乏文档,我无法转换以下代码行。我的项目使用OpenCvSharp和NumSharp,这是numpy到c#的一个端口。任何帮助都将不胜感激

Python代码:

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# smooth the image using a 3x3 Gaussian, then apply the blackhat
# morphological operator to find dark regions on a light background
gray = cv2.GaussianBlur(gray, (3, 3), 0)
blackhat = cv2.morphologyEx(gray, cv2.MORPH_BLACKHAT, rectKernel)

# compute the Scharr gradient of the blackhat image and scale the
# result into the range [0, 255]
gradX = cv2.Sobel(blackhat, ddepth=cv2.CV_32F, dx=1, dy=0, ksize=-1)
gradX = np.absolute(gradX)
(minVal, maxVal) = (np.min(gradX), np.max(gradX))
gradX = (255 * ((gradX - minVal) / (maxVal - minVal))).astype("uint8")
C#代码:

//计算blackhat图像的Scharr梯度并缩放 //结果进入范围[0,255] Sabel(blackhat,gradX,MatType.CV_32F,1,0,-1,1,0)


具体来说,我在Python代码的最后一行遇到了问题。我不知道如何在c#中执行该计算。我也不确定是否正确获取了
minVal
maxVal
值。

8位无符号整数是C#中的
字节。您可以这样做:

var gradX = Convert.ToByte(255 * ((gradX - minVal) / (maxVal - minVal)));

我不确定那些最小值和最大值函数在做什么,所以我也无能为力。

以下是我最初问题的解决方案:

// compute the Scharr gradient of the blackhat image and scale the
// result into the range [0, 255]
Cv2.Sobel(blackhat, gradX, MatType.CV_32F, 1, 0, -1, 1, 0);

//(minVal, maxVal) = (np.min(gradX), np.max(gradX))
double minVal, maxVal;
gradX.MinMaxLoc(out minVal, out maxVal);

//gradX = (255 * ((gradX - minVal) / (maxVal - minVal))).astype("uint8")
gradX.ConvertTo(gradX, MatType.CV_8U, 255.0 / (maxVal - minVal), -255.0 / minVal);

隐马尔可夫模型。。一个合理的论点。。但在本例中,我操作的是数组。更让人困惑的是。这行代码应该规范化表示图像的数组。我将尝试提供关于此代码上下文的更多详细信息,但原始帖子在这里:你是说
gradX
minVal
和/或
maxVal
是数组吗?嗨,Gabriel,我明白了。。我已经更新了上面的代码以反映解决方案。非常感谢。
var gradX = Convert.ToByte(255 * ((gradX - minVal) / (maxVal - minVal)));
// compute the Scharr gradient of the blackhat image and scale the
// result into the range [0, 255]
Cv2.Sobel(blackhat, gradX, MatType.CV_32F, 1, 0, -1, 1, 0);

//(minVal, maxVal) = (np.min(gradX), np.max(gradX))
double minVal, maxVal;
gradX.MinMaxLoc(out minVal, out maxVal);

//gradX = (255 * ((gradX - minVal) / (maxVal - minVal))).astype("uint8")
gradX.ConvertTo(gradX, MatType.CV_8U, 255.0 / (maxVal - minVal), -255.0 / minVal);