Неисправность адаптивного режима: CV_8UC1 в функции adaptiveThreshold

Я использовал 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

Должен ли я установить что-то еще?

Ответ 1

вы должны загрузить свой файл следующим образом

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

Проблема заключается в том, что вы пытаетесь использовать адаптивное пороговое значение для изображения, которое не находится в оттенках серого. И функция работает только с изображениями в оттенках серого.

Итак, вам нужно преобразовать изображение в формат оттенков серого, как описано в документации.

Они читают изображение в формате оттенков серого с помощью: img = cv2.imread('dave.jpg',0). Вы также можете преобразовать его в оттенки серого с помощью: img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

Ответ 3

вы можете изменить код примерно так:

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

просто добавив ("uint8"), в то время как размытие разрешило мою проблему.