首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在将代码从Python转换为c#时遇到问题

在将代码从Python转换为c#时遇到问题
EN

Stack Overflow用户
提问于 2019-08-16 08:42:47
回答 2查看 720关注 0票数 1

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

Python代码:

代码语言:javascript
复制
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#代码:

代码语言:javascript
复制
// smooth the image using a 3x3 Gaussian, then apply the blackhat
// morphological operator to find dark regions on a light background
smallImage = smallImage.GaussianBlur(new Size(3, 3), 0);
Cv2.MorphologyEx(smallImage, blackhat, MorphTypes.BlackHat, rectKernel);

//计算黑帽图像的Scharr梯度,//将结果缩放到0,255 Cv2.Sobel( blackhat,gradX,MatType.CV_32F,1,0,-1,1,0);

代码语言:javascript
复制
        //(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);

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-17 07:52:53

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

代码语言:javascript
复制
// 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);
票数 1
EN

Stack Overflow用户

发布于 2019-08-16 10:49:04

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

代码语言:javascript
复制
var gradX = Convert.ToByte(255 * ((gradX - minVal) / (maxVal - minVal)));

我不确定这些min和max函数在做什么,所以我对此无能为力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57517702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档