我希望可以阈值为3种颜色:黑色、白色和灰色,而不仅仅是黑色和白色,这样以后我就可以把贴纸从原来的img中分离出来
现在我的.py
脚本可以阈值化,使图像的颜色为白色色
import numpy as np
import glob
import matplotlib.pyplot as plt
import skimage.io
import skimage.color
import skimage.filters
# load the image
image = skimage.io.imread("/home/student_joy/desktop/optimization_11_10/original_duplicate.png")[:,:,:3]
# image = imageio.imread(image_name)[:,:,:3]
# img = rgb2gray(image)
fig, ax = plt.subplots()
plt.imshow(image)
# convert the image to grayscale
gray_image = skimage.color.rgb2gray(image)
# blur the image to denoise
blurred_image = skimage.filters.gaussian(gray_image, sigma=1.0)
fig, ax = plt.subplots()
plt.imshow(blurred_image, cmap="gray")
# create a histogram of the blurred grayscale image
histogram, bin_edges = np.histogram(blurred_image, bins=256, range=(0.0, 1.0))
fig, ax = plt.subplots()
plt.plot(bin_edges[0:-1], histogram)
plt.title("Grayscale Histogram")
plt.xlabel("grayscale value")
plt.ylabel("pixels")
plt.xlim(0, 1.0)
# create a mask based on the threshold
t = 0.72
binary_mask = blurred_image < t
fig, ax = plt.subplots()
plt.imshow(binary_mask, cmap="gray")
plt.show()
见结果图:https://imgur.com/a/u4KvF7Z
我不确定如何正确设置binary_mask,即t
值
1条答案
按热度按时间kb5ga3dv1#
当你计算右边的布尔表达式时,这将给予false(0)或true(1)作为掩码的目标值(如果你真的需要一个掩码,这是有意义的,因为它是一个二进制图像)。
如果您只想分离贴纸区域(因此删除所有灰色区域),您可以执行以下操作
或者使用
cv.threshold()
进行类似操作。关于发现你的门槛:如果你点击这个链接How to get threshold value from histogram?并查找“大津的二值化“部分,它解释了如何为双峰直方图区域获取阈值。屏蔽掉你刚刚发现的灰色区域,只留下黑色和白色的贴纸,然后让Otsu处理剩下的部分。