gpt4 book ai didi

python - 敷面膜时颜色显示错误

转载 作者:太空宇宙 更新时间:2023-11-03 23:06:34 25 4
gpt4 key购买 nike

我试图在 OpenCV 中(使用 Python)过滤图像,但在应用掩码后我得到了一个蓝色区域而不是黑色

很快,代码将图像的颜色空间从 BGR 更改为 LAB,然后使用函数 cv2.inRange 创建掩码并使用 cv2.bitwise_not 反转它.之后,使用函数 cv2.bitwise_and 应用掩码。以下是原始帧和过滤后的帧:

/image/6pGym.png

一开始,我认为这可能是 BGR/RGB 图像表示之间的问题,但排除了蓝色区域,图像的颜色是正确的。

代码如下:

# Parameter "frame": BGR image.
# Parameter "min": min LAB val.
# Parameter "max": max LAB val.
# Return filtered frame in BGR.
def applyFilter(frame, min, max):

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)

mask = cv2.inRange(frame, min, max)
mask = cv2.bitwise_not(mask)

filtered_frame = cv2.bitwise_and(frame, frame, mask=mask)

return cv2.cvtColor(filtered_frame, cv2.COLOR_LAB2BGR)

最佳答案

LAB 色彩空间有 3 个 channel ,L 从 0-100%,a 从 -128 到 128,b从 -128 变为 128。对于 uint8 图像,LAB 中的 OpenCV 值如下:

enter image description here

您的问题是,在 OpenCV 中,LAB 中的值 (0,0,0) 实际上是 (0, -128, -128) 可以看一下在网上colorpicker看到它是蓝色的。

当您应用蒙版时,不在蒙版中的部分保持“黑色”(0,0,0),一旦从 LAB 转换为 BGR,它就会变成蓝色。如果想法是将未选中的内容保留为黑色,您有 2 个解决方案:

1) 将蒙版应用于原始图像

2) 将 0,0,0 像素转换为 0,128,128

对于 1) 代码将是这样的:

# Parameter "frame": BGR image.
# Parameter "min": min LAB val.
# Parameter "max": max LAB val.
# Return filtered frame in BGR.
def applyFilter(frame, min, max):

tempFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2LAB)

mask = cv2.inRange(tempFrame, min, max)
mask = cv2.bitwise_not(mask)

filtered_frame = cv2.bitwise_and(frame, frame, mask=mask)

return filtered_frame

关于python - 敷面膜时颜色显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56985057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com