Opencv 如何从图像中删除类似光影的颜色

Opencv 如何从图像中删除类似光影的颜色,opencv,image-processing,Opencv,Image Processing,我正在使用opencv处理一些图像。我有很多像下面这样的图片。他们有一些非常轻,阴影般的颜色 什么是尺寸决定像素的颜色是非常轻的?我应该使用什么颜色空间来识别那些浅色像素 这里有一个相当简单的方法: img = cv2.imread('4.png') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img[gray > 200] = 255 正如@RickM所提到的,有各种颜色空间可用于分析图像。由于您专注于移除阴影/阴影,因此需要专注于包含亮

我正在使用opencv处理一些图像。我有很多像下面这样的图片。他们有一些非常轻,阴影般的颜色

什么是尺寸决定像素的颜色是非常轻的?我应该使用什么颜色空间来识别那些浅色像素


这里有一个相当简单的方法:

img = cv2.imread('4.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

img[gray > 200] = 255

正如@RickM所提到的,有各种颜色空间可用于分析图像。由于您专注于移除阴影/阴影,因此需要专注于包含亮度信息的通道,并将颜色通道放在一边

在这种情况下,实验室颜色空间被证明是有用的。亮度通道表达了很多关于图像亮度的信息

img = cv2.imread('4.png')
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
l, a, b = cv2.split(lab)

cv2.imshow('Luminance', l)

然后,我获得一个阈值,并用原始图像掩盖结果,得到
mask1

ret2, th = cv2.threshold(l, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
mask1 = cv2.bitwise_and(img, img, mask = th)
cv2.imshow('mask1', mask1)

但是现在背景不是你想要的。 我创建了一个具有相同图像尺寸的白色像素的图像(
white
),并用它屏蔽反转的阈值图像以获得
mask2

white = np.zeros_like(img)
white = cv2.bitwise_not(white)

mask2 = cv2.bitwise_and(white, white, mask = cv2.bitwise_not(th))
cv2.imshow('mask2', mask2)

添加这两个图像后,您将获得预期图像:

cv2.imshow('fin_img', mask2 + mask1)


请记住,这仅适用于问题中提供的类似图像。

您是否尝试过查看?您还可以尝试使用Lab/Luv颜色空间的参数。此外,如果你有很多不同颜色的图像,因此有不同的阴影,你可以训练一个SVN/神经网络,使所有阴影变成白色(255、255、255)或它旁边的颜色。这些光区域用于抗锯齿。为什么要删除它们?正如您所提到的,这只适用于问题中提供的图像(或类似图像)。如果数据集有很多变化,那么使用ML将是最好的选择。@RickM。OP提到“我有很多像下面这样的图像”,我同意如果这种方法用于背景较暗的图像,它将失败。使用ML难道你不需要提供一个遮罩吗?不一定,你可以通过观察阴影周围的颜色来进行颜色收集,并使其达到所需的值(白色或OP想要的颜色)