【问题标题】:OpenCV convert Python code to JavaOpenCV 将 Python 代码转换为 Java
【发布时间】:2018-03-27 15:20:42
【问题描述】:

我有以下 Python 代码:

ret,thresh = cv2.threshold(gray,5,255,cv2.THRESH_TOZERO)
kernel1 = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(11,11))
kernel2 = np.ones((3,3),np.uint8)
erosion = cv2.erode(thresh,kernel2,iterations = 1)
dilation = cv2.dilate(erosion,kernel1,iterations = 7)

我正在尝试将其转换为 Java。这是我当前的版本:

double thresh = Imgproc.threshold(gray, gray, 5, 255, Imgproc.THRESH_TOZERO);
Mat kernel1 = Imgproc.getStructuringElement(Imgproc.MORPH_ELLIPSE, new Size(11, 11));
Mat kernel2 = Mat.ones(3, 3, CvType.CV_8U);
Mat erosion = new Mat();
Imgproc.erode(gray, erosion, kernel2);
Mat dilation = new Mat();
Imgproc.dilate(erosion, dilation, kernel1);

现在我找不到应该应用 thresh 参数的地方,而且我也没有为 Imgproc.erodeImgproc.dilate 方法使用 iterations 参数,因为这种情况下的方法签名也是需要额外的Point anchor 参数,我现在没有。

如何正确地将这段代码转换成Java?

更新

我做以下翻译:

Mat erosion = new Mat();
Imgproc.erode(gray, erosion, kernel2, new Point(), 1);
Mat dilation = new Mat();
Imgproc.dilate(erosion, dilation, kernel1, new Point(), 7);

看起来它正在按预期工作,但我不确定new Point() 是正确的翻译吗?

【问题讨论】:

    标签: java python opencv


    【解决方案1】:

    这是C++/Python/Java 中的dilate 声明:

    C++: void dilate(InputArray src, OutputArray dst, InputArray kernel, 
            Point anchor=Point(-1,-1),
            int iterations=1,
            int borderType=BORDER_CONSTANT,
            const Scalar& borderValue=morphologyDefaultBorderValue() )
    
    Python: cv2.dilate(src, kernel[, dst
                [, anchor[, iterations[, borderType[, borderValue]]]]]) → dst
    
    Java: static void dilate(Mat src, Mat dst, Mat kernel, Point anchor, int iterations)
    

    因为如果你想使用参数iterationsanchor 没有默认值。所以通过new Point(-1,-1)是更好的选择。

    Imgproc.dilate(src, dst, kernel, new Point(-1,-1), iterations);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-25
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2015-04-08
      相关资源
      最近更新 更多