用于特定颜色部分提取的 Numpy
Numpy for specific color section extraction
我是 python 的新手,正在尝试将图像中的彩色部分与灰度部分分开。
尽管此代码(见下文)为我提供了我正在寻找的结果,但它需要很长时间(普通图像需要 10 秒以上)。
我找了一个小时没有找到合适的答案,因为大多数只是分开特定的颜色(黑色、白色...)或阈值。
据我(已经)知道 numpy 是可行的方法,但我没有成功 :S
期待帮助 - 谢谢!
gray_elements = np.zeros_like(image)
gray_elements[:] = 255
colored_segments = np.zeros_like(image)
colored_segments[:] = 255
# Separate black-to-white-colors from colored
for y in range(image.shape[0]):
for x in range(image.shape[1]):
pxl = image[y, x]
if max(pxl) - min(pxl) > 5:
colored_segments[y, x] = pxl
else:
gray_elements[y, x] = pxl
未经测试,但因为今天是圣帕特里克节...
如果您有一个包含 3 通道 RGB 图像的 Numpy 数组 na
,它将有 na.shape
个 (h,w,3)
。
您可以获得每个点的 3 个通道中的最大值:
ma = np.amax(na, axis=2, keepdims=True)
最小值:
mi = np.amin(na, axis=2, keepdims=True)
那么区别是:
diff = ma - mi
然后制作一个布尔值 (true/false) 掩码:
grey = diff < 5
If/when你对Numpy越来越熟悉了,你可能会用到peak-to-peak函数。
但通常情况下,您会使用 OpenCV,转换为 HSL 色彩空间,然后找到饱和度通道较低的像素,这意味着颜色不饱和,而是灰色。
我是 python 的新手,正在尝试将图像中的彩色部分与灰度部分分开。 尽管此代码(见下文)为我提供了我正在寻找的结果,但它需要很长时间(普通图像需要 10 秒以上)。
我找了一个小时没有找到合适的答案,因为大多数只是分开特定的颜色(黑色、白色...)或阈值。
据我(已经)知道 numpy 是可行的方法,但我没有成功 :S
期待帮助 - 谢谢!
gray_elements = np.zeros_like(image)
gray_elements[:] = 255
colored_segments = np.zeros_like(image)
colored_segments[:] = 255
# Separate black-to-white-colors from colored
for y in range(image.shape[0]):
for x in range(image.shape[1]):
pxl = image[y, x]
if max(pxl) - min(pxl) > 5:
colored_segments[y, x] = pxl
else:
gray_elements[y, x] = pxl
未经测试,但因为今天是圣帕特里克节...
如果您有一个包含 3 通道 RGB 图像的 Numpy 数组 na
,它将有 na.shape
个 (h,w,3)
。
您可以获得每个点的 3 个通道中的最大值:
ma = np.amax(na, axis=2, keepdims=True)
最小值:
mi = np.amin(na, axis=2, keepdims=True)
那么区别是:
diff = ma - mi
然后制作一个布尔值 (true/false) 掩码:
grey = diff < 5
If/when你对Numpy越来越熟悉了,你可能会用到peak-to-peak函数。
但通常情况下,您会使用 OpenCV,转换为 HSL 色彩空间,然后找到饱和度通道较低的像素,这意味着颜色不饱和,而是灰色。