【发布时间】:2018-10-21 13:23:55
【问题描述】:
【问题讨论】:
-
你试过看HSV吗?您也可以尝试使用 Lab/Luv 颜色空间的参数。此外,如果您有很多不同颜色的图像,因此有不同的阴影,您可以训练一个 SVN/神经网络,将所有阴影变为白色(255、255、255)或旁边的颜色。
-
那些明亮的区域用于抗锯齿。为什么要删除它们?
【问题讨论】:
正如@RickM 所提到的,有多种色彩空间可用于分析您的图像。由于您专注于去除阴影/阴影,因此您需要专注于包含亮度信息的通道并将颜色通道放在一边。
在这种情况下,LAB 色彩空间被证明是有帮助的。亮度通道表达了很多关于图像亮度的信息
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)
请记住,这仅适用于问题中提供的类似图片。
【讨论】: