# Read image in grayscale mode
img = cv2.imread(inp_pic,0)

    # Median Blur and Gaussian Blur to remove Noise
img = cv2.medianBlur(img,3)
img = cv2.GaussianBlur(img, (5, 5), 0)
print(img)

    # Adaptive Threshold for handling lightning
im_th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,5)
print(im_th)

函数自适应阈值在这里返回一个空矩阵,但是正在传递的图像(img)不是一个空矩阵(我使用print语句检查了)为什么会这样?

您可以在这里找到源代码:
https://github.com/tanmay-edgelord/HandwrittenDigitRecognition/blob/master/performRecognition.ipynb

最佳答案

我在https://github.com/tanmay-edgelord/HandwrittenDigitRecognition/blob/master/Digit1.jpg上的图像上运行了您的代码,它按预期工作。我所做的唯一更改是使用cv2.imshow()显示图像。

import numpy as np
import cv2
    # Read image in grayscale mode
img = cv2.imread(r"path\to\img",0)

    # Median Blur and Gaussian Blur to remove Noise
img = cv2.medianBlur(img,3)
img = cv2.GaussianBlur(img, (5, 5), 0)
#print(img)

    # Adaptive Threshold for handling lightning
im_th = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY_INV,11,5)
cv2.imshow("te", im_th)
if cv2.waitKey():
    cv2.destroyAllWindows()

结果如下:

python - cv2.adaptiveThreshold()返回空矩阵-LMLPHP

您为什么确定这是一个空矩阵?如果只是从[0 0 0 ..., 0 0 0]来看,这是一个很大的数组。 Python只是将其显示为数组的简写形式。只需使用np.maximum(img_th)即可获取数组中的最大值,您将看到最大值为非零。

关于python - cv2.adaptiveThreshold()返回空矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44812195/

10-10 23:59