Я работаю с кодом, который удаляет крупные объекты из изображения на основе определенного порога.
Код, с которым я работаю, сохраняет файл после операции morphology из модуля skimage :
from skimage import measure, morphology
# EDIT: added blobs_labels calculation
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)[1] # ensure binary
blobs = img > img.mean()
blobs_labels = measure.label(blobs, background=1)
constant = 200
b = morphology.remove_small_objects(blobs_labels, constant)
# save the the pre-version which is the image is labelled with colors
plt.imsave('pre_version.png', b)
# read the pre-version
img = cv2.imread('pre_version.png', 0)
img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
Теперь я хотел бы напрямую применить пороговый метод - без сохранения промежуточного изображения - к выводу морфологического изображения (b):
b = morphology.remove_small_objects(blobs_labels, constant)
img = cv2.threshold(b, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)[1]
Однако, если я изменю код, как указано выше, я получу следующую ошибку:
ошибка: OpenCV (4.1.2) C: \ projects \ opencv-python \ opencv \ modules \ imgproc \ src \ трех sh. cpp: 1527:
ошибка: (-215: утверждение не выполнено) sr c .type () == CV_8UC1 в функции 'cv :: threshold'
Мои вопросы: почему я не могу напрямую применить пороговый метод для выхода морфологии?