【发布时间】:2019-11-11 01:06:33
【问题描述】:
我正在尝试获得具有多级阈值含义的图像蒙版,考虑到我想要对图像进行阈值处理的像素的强度 - 白色用于最亮区域,灰色用于稍微不太亮的区域,黑色用于相对较暗的区域。我遇到过有关多级 otsu 阈值的各种文章,但找不到可以用作参考的实现。一旦我有了这些掩码,我想对这些掩码执行 bitwise_and 以检索白色和灰色区域的原始图像区域。那可能吗?
目前,我正在使用ret, thresh_ = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU) 获取口罩。
我尝试使用 if 语句显式设置值。
if(thresh_ <=80):
thresh_ = 0
elif(thresh_ >80 & thresh_ <=160):
thresh_ = 150
else:
thresh_ = 255
但它不起作用,并且报错- 具有多个元素的数组的真值是模棱两可的。使用 a.any() 或 a.all()
for file in glob.glob(path):
img = cv2.imread(file)
#edge detection
canny = auto_canny(img)
#Dilation(Morphological function to increase edge width)
img_dilate = cv2.dilate(canny, (3,3), iterations = 1)
【问题讨论】:
-
您可以使用 cv2.inrange() 为您想要的每个范围创建 3 个阈值图像。见docs.opencv.org/4.1.1/d2/de8/…
-
如果你在谷歌上搜索,你会找到stackoverflow.com/questions/22706742/…,也许还有其他人。同样来自 Skimage,请参阅scikit-image.org/docs/dev/auto_examples/segmentation/…
-
@fmw42 在 python 中可用吗?
-
Skimage 与 python 兼容
-
@fmw42 我尝试了这些方法,但对我不起作用。也许我做错了什么。这就是我使用 if 语句明确指定范围的原因。
标签: python numpy opencv image-processing