Ответ 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);
Я использовал 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
Должен ли я установить что-то еще?
вы должны загрузить свой файл следующим образом
src.create(rows, cols, CV_8UC1);
src = imread(your-file, CV_8UC1);
и после этого
adaptiveThreshold(src, dst, 255, ADAPTIVE_THRESH_GAUSSIAN_C, THRESH_BINARY, 75, 10);
Проблема заключается в том, что вы пытаетесь использовать адаптивное пороговое значение для изображения, которое не находится в оттенках серого. И функция работает только с изображениями в оттенках серого.
Итак, вам нужно преобразовать изображение в формат оттенков серого, как описано в документации.
Они читают изображение в формате оттенков серого с помощью: img = cv2.imread('dave.jpg',0)
. Вы также можете преобразовать его в оттенки серого с помощью: img_grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
вы можете изменить код примерно так:
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"), в то время как размытие разрешило мою проблему.