OpenCV:自适应阈值处理出错(错误-215)

时间:2019-07-27 10:03:41

标签: python opencv computer-vision

我尝试在图像上应用Sobel滤波后进行自适应阈值处理,如以下代码所示:

import numpy as np
import matplotlib.pyplot as plt
import cv2

image = cv2.imread("train.jpg")
img = np.array(image, dtype=np.uint8)

#convert to greyscale
img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

#remove noise
img_smooth = cv2.GaussianBlur(img_grey, (13,13), 0)

sobely = cv2.Sobel(img_smooth,cv2.CV_64F,0,1,ksize=9)

thres = cv2.adaptiveThreshold(sobely, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                          cv2.THRESH_BINARY, 73, 2)

但是,当我尝试进行自适应阈值处理时,出现以下错误:

cv2.error: OpenCV(4.1.0) /Users/travis/build/skvark/opencv- 
python/opencv/modules/imgproc/src/thresh.cpp:1627: error: (-215:Assertion 
failed) src.type() == CV_8UC1 in function 'adaptiveThreshold'

我已阅读到如果您的图像不是灰度图像,则会发生此错误,但是,我在代码开始时将图像转换为灰度图像。我不确定为什么会收到此错误。任何见解都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

您所读的内容是正确的,该错误实际上意味着您的Mat不是灰度图像。

发生这种情况是因为Sobel会将数据更改为cv2.CV_64F(请参见文档here中的第二个参数)。 因此,在Sobel之后,您需要将图像转换为灰度,可以使用convertScaleAbs进行,然后将其输出到adaptiveThreshold