我一直在尝试用深度学习框架来进行图像检测的数据增强。
我在Python中使用Opencv3.3。
我的框架是:
最初的图像是第一个,结果是下面的结果。
从下面看,红色瓶子上有一些污渍。
我随机抽取了- 10,10的色氨酸,在- 80,80的饱和范围内,在- 40,40的范围内。
此外,在这个链接之后,我设置了如下代码。
class RandomHSV(object):
def __init__(self, hue = None, saturation = None, brightness = None):
if hue:
self.hue = hue
else:
self.hue = 0
if saturation:
self.saturation = saturation
else:
self.saturation = 0
if brightness:
self.brightness = brightness
else:
self.brightness = 0
if type(self.hue) != tuple:
self.hue = (-self.hue, self.hue)
if type(self.saturation) != tuple:
self.saturation = (-self.saturation, self.saturation)
if type(brightness) != tuple:
self.brightness = (-self.brightness, self.brightness)
def __call__(self, img, bboxes):
hue = random.randint(*self.hue)
saturation = random.randint(*self.saturation)
brightness = random.randint(*self.brightness)
img = img.astype(int)
a = np.array([hue, saturation, brightness]).astype(int)
img += np.reshape(a, (1,1,3))
img = np.clip(img, 0, 255)
img[:,:,0] = np.clip(img[:,:,0],0, 179)
img = img.astype(np.uint8)
return img, bboxes


发布于 2019-12-11 16:03:39
看起来,openCV RGB到HSV没有我们期望的值。我把你的图像转换成HSV,看看每个通道的范围。在每个通道上使用np.max(imageHSV[:,:,c])和np.min(imageHSV[:,:,c]),我看到色调在0到360之间,而饱和度和值都在0到1之间。
img = np.clip(img, 0, 255)
img[:,:,0] = np.clip(img[:,:,0],0, 179)然后转换回RGB,我得到了这样的结果:

我尝试在0到360 (色调)和0与1(饱和度和值)之间剪裁,如下所示:
imageHSV = cv2.cvtColor(image,cv2.COLOR_RGB2HSV)
imageHSV[:,:,1] = np.clip(imageHSV[:,:,1], 0.0, 1.0)
imageHSV[:,:,2] = np.clip(imageHSV[:,:,2], 0.0, 1.0)
imageHSV[:,:,0] = np.clip(imageHSV[:,:,0],0.0, 360.0)然后我转换回RGB,这就是结果。

编辑- HSV输出取决于输入转换器的数据类型,参见这文档。我的图像对于(H,S和V)的范围是(0-360,0-1,0-1),因为我是如何把它传递给cv2.cvtColor的。检查要传递到RGB2HSV转换函数中的数据,并检查输出,看看是否有要剪辑的范围。我仍然认为这可能是一个数据类型或数据裁剪问题。
https://stackoverflow.com/questions/59288606
复制相似问题