在Android上使用OpenCV将Mat元素缩放到[0..255]范围

时间:2018-02-14 08:35:47

标签: opencv opencv4android

我正在尝试将一些OpenCV python代码转换为Java,并且遇到了在Java包装器中找到正确函数的问题。有问题的python代码是沿x轴计算Scharr梯度:

# 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")

[代码来自pyimagesearch网站 - 检测护照图片中的机器可读区域 - 博客文章]

我在Java中拥有的是:

Imgproc.Sobel(blackhat, gradX, CvType.CV_32F, 1, 0, -1, 1.0, 0, Core.BORDER_DEFAULT);
Core.convertScaleAbs(gradX, gradX);
Core.MinMaxLocResult minmax = Core.minMaxLoc(gradX);

这应该输出与python代码的前三行相同的结果。但我被困在最后一个。如何使用Java API将gradX缩放回[0..255]范围?

convertScaleAbs函数是否也执行与NumPys绝对相同的操作?

1 个答案:

答案 0 :(得分:0)

normalizenormType=NORM_MINMAX一起使用。