使用HSV颜色空间是非常好的。如果显示图像的色调和饱和度分量,您将看到红色粒子具有相对较大的色调和较小的饱和度。在
顺便说一句,你的图像分辨率相当大。我将减少采样,以便将图像拟合到post中,同时最小化处理时间。首先让我们加载您的图像,将其调整到25%的分辨率,然后提取出HSV组件:import cv2
import numpy as np
im = cv2.imread('sample.png')
im_resize = cv2.resize(im, None, None, 0.25, 0.25)
out = cv2.cvtColor(im_resize, cv2.COLOR_BGR2HSV)
stacked = np.hstack([out[...,0], out[...,1]])
cv2.imshow("Hue & Saturation", stacked)
cv2.waitKey(0)
cv2.destroyAllWindows()
我还将色调和饱和度通道叠加到一个图像中,这样我们就可以看到它的样子,并将其显示在屏幕上。在
我们得到这样的图像:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5CZxUzM0cDNhZGMkdTYzQmY4MzMhZmZxAjN5IDMxYDOy8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
与图像的其余部分相比,相对较大的色调分量与低饱和度分量的组合是独特的。让我们做一些简单的阈值提取那些分量,我们在这些分量中查找色调分量大于一个阈值,饱和度分量小于另一个阈值的区域:
^{pr2}$
我设置了一些优化的阈值,然后使用^{}将这两个条件组合在一起。因为图像现在是bool类型,要显示图像,它们应该是无符号或浮点类型,我们将图像转换为uint8,然后乘以255。在
我们现在得到的图像是:
如您所见,我们提取出与背景不常见的红色色调部分。阈值也需要进行调整,但对于这个特定的例子来说,这没什么大不了的。在