如何在OpenCV中使用HSL进行亮度阈值处理?

4

我正在处理一个需要检测白色的项目,经过一些研究,我决定将 RGB 图像转换为 HSL 图像,并通过阈值法来获取白色。我使用的是 openCV,想知道是否有方法可以做到这一点。

在此处输入图片描述

在OpenCV中,HLS是常用的颜色空间,而通常图像以BGR格式加载。请看cvtColor - api55
是的,我能够将BGR转换为HLS,但我卡在如何过滤掉亮度属性过低的像素上,以便图像只留下白色阴影。 - Minh Cht
使用split函数(或使用numpy切片)来分离通道,然后在L通道(第二个通道)中使用阈值,从而得到一个掩膜。接着将该掩膜应用于原始图像。如果您发布一个示例图像,我可以尝试给出完整的答案。 - api55
1个回答

12

您只需要4个简单步骤:

将HLS转换为:

img = cv2.imread("HLS.png")
imgHLS = cv2.cvtColor(img, cv2.COLOR_BGR2HLS)

获取L通道

Lchannel = imgHLS[:,:,1]

创建口罩

#change 250 to lower numbers to include more values as "white"
mask = cv2.inRange(Lchannel, 250, 255)
应用遮罩到原始图像。
res = cv2.bitwise_and(img,img, mask= mask)
这也取决于你认为什么是白色,你可以更改值 :) 我在L通道中使用了inRange,但你可以省略一步操作。
mask = cv2.inRange(imgHLS, np.array([0,250,0]), np.array([255,255,255]))

改为以下内容:

Lchannel = imgHLS[:,:,1]
mask = cv2.inRange(Lchannel, 250, 255)

这个更短,但我先用另一种方式做了一遍,以使它更明确,并展示我正在做什么。

图片:

在此输入图片描述

结果:

在此输入图片描述

结果几乎看起来像掩模图案(几乎是二进制),但根据您的阈值下限(我选择了250),您可能会得到一些几乎白色的颜色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接