无法在函数adaptiveThreshold中使用adaptiveThreshold:CV_8UC1

时间:2014-11-19 10:14:59

标签: python opencv

我使用过openCV python并遇到错误。

img_blur = cv2.medianBlur(self.cropped_img,5)
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

plt.subplot(1,1,1),plt.imshow(img_thresh_Gaussian, cmap = 'gray')
plt.title("Image"), plt.xticks([]), plt.yticks([])
plt.show()

但我收到了:

cv2.error: /home/phuong/opencv_src/opencv/modules/imgproc/src/thresh.cpp:1280: error: (-215) src.type() == CV_8UC1 in function adaptiveThreshold

我是否必须安装别的东西?

7 个答案:

答案 0 :(得分:71)

问题是您正在尝试对不是灰度的图像使用自适应阈值处理。该功能仅适用于灰度图像。

因此,您必须将图像转换为灰度格式,如documentation中所述。

他们使用:img = cv2.imread('dave.jpg',0)以灰度格式读取图像。您还可以使用:img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

将其转换为灰度

答案 1 :(得分:13)

你应该像这样加载你的文件

src.create(rows, cols, CV_8UC1);
src = imread(your-file, CV_8UC1);

之后

adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 75, 10);

答案 2 :(得分:5)

您必须以灰度 读取图像,因此请使用以下代码:

image = imread('address', 0)

0将图像的通道交换为灰度

答案 3 :(得分:2)

您可以将代码更改为如下所示:

>>> timeit("a*b", "a,b = 2, 123456**2", number=100000000)
3.0912468433380127
>>> timeit("a*b", "a,b = 2*123456, 123456", number=100000000)
3.1120400428771973

仅在模糊时添加('uint8')就解决了我的问题。

答案 4 :(得分:2)

尝试在imread的第二个参数中添加cv2.IMREAD_GRAYSCALE

img = cv2.imread(File_path, cv2.IMREAD_GRAYSCALE)

答案 5 :(得分:1)

在阈值化之前将图像转换为灰度:

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_blur = cv2.medianBlur(img_gray,5)
img_thresh_Gaussian = cv2.adaptiveThreshold(img_blur, 255,
        cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 11, 2)

答案 6 :(得分:0)

要解决这个问题,您需要使用 0(零)作为另一个参数而不是图像路径来加载灰度图像。
img = cv2.imread(imagepath, 0)

img = cv2.imread(imagepath, cv2.IMREAD_GRAYSCALE)