我尝试在图像上应用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'
我已阅读到如果您的图像不是灰度图像,则会发生此错误,但是,我在代码开始时将图像转换为灰度图像。我不确定为什么会收到此错误。任何见解都会受到赞赏。
答案 0 :(得分:0)
您所读的内容是正确的,该错误实际上意味着您的Mat
不是灰度图像。
发生这种情况是因为Sobel
会将数据更改为cv2.CV_64F
(请参见文档here中的第二个参数)。
因此,在Sobel之后,您需要将图像转换为灰度,可以使用convertScaleAbs进行,然后将其输出到adaptiveThreshold