def img_depth_mask(picpath, depthpath):
pic_list = os.listdir(picpath)
for pic in pic_list:
image = cv2.imread(depthpath + '/' + pic, 0)
thresh = filters.threshold_otsu(image) # 返回一个阈值
dst = (image <= thresh) * 1.0 # 根据阈值进行分割
dst = dst*255
imname = picpath + '/' + pic
img = cv2.imread(imname, cv2.IMREAD_COLOR)
res = cv2.bitwise_and(img, img, mask=dst)
cv2.imshow('res',res)
cv2.waitKey()
在找怎么解决这个问题的时候,看到有人说是掩膜的图像通道数不是单通道。在掩膜中,必须是单通道图像。但是很显然,我这边的掩膜图案就是单通道。
后来我自己把掩膜图像和原图像print出来看了一下,发现原来两种图像的数字类型不同,一个是float,一个是int。
dst = (image <= thresh) * 1.0 # 根据阈值进行分割
dst = dst*255
dst = np.array(dst, dtype=np.uint8)
加了一行代码后,成功解决错误。
简单记录一下自己遇到的问题,希望能够帮到大家!