我的图片如下
在此图像中,我想将黄色数字转换为BLACK
颜色,将RED
区域转换为灰色。黑色和灰色区域不应更改。
我该怎么做?有人可以帮忙吗?
我看了几个问题,但我无法弄清楚。另外,由于黄色和红色两种颜色并不完全相同,而是在一定范围内,因此我无法直接替换这些颜色。
CV2或PIL都可以。
如果必须使用HSV值,请让我知道如何计算范围。已经提出了这个问题,并且已经有一些答案,但是我无法理解,所以任何其他指导都将有所帮助
我期望的输出类似于下面的图片(通过在Gimp中绘制像素来创建)。不完全是您所看到的,但是您知道我在寻找什么。
更新 我最终使用的解决方案如下。这使所有黄色字母变为黑色,这对我来说已经足够了(我认为,通过类似的方法,所有红色区域也可以变为灰色)
img = Image.open('Testpic.jpg').convert('RGB')
roi = img.crop((652,125,697,295))
orig_color1 = (210,140,0)
orig_color2 = (210,210,210)
replacement_color = (4,4,4)
roi = roi.resize((288, 1014), Image.ANTIALIAS)
data = np.array(roi)
data[((data >= orig_color2)).all(axis = -1)] = (255,0,0)
data[((data >= orig_color1)).all(axis = -1)] = replacement_color
data[((data == (255,0,0))).all(axis = -1)] = (255,255,255)
img2 = Image.fromarray(data, mode='RGB')
答案 0 :(得分:2)
您的图像质量不是最好的,并且如果可以得到更好的输入,您的结果应该会得到改善。我只是展示一种使用 ImageMagick 的技术,如果有人喜欢的话,可以稍后将其转换为Python wand-这应该不太困难。
因此,在这种情况下,与其在HSL色彩空间中选择范围,不如将图像重新映射到特定调色板更容易,而且可能更好,因为您只想区分4种颜色。因此,我制作了以下4种颜色的调色板-像这样的黑色,灰色,黄色和红色:
magick xc:"gray(15)" xc:"gray(178)" xc:"rgb(230,50,30)" xc:"rgb(230,190,90)" +append palette.png
这使这个(大大放大了)的4x1调色板:
然后我将您的图像重新映射为该调色板的颜色:
magick column.png +dither -remap palette.png intermediate.png
然后,我将所有接近黑色的颜色替换为黑色,将所有接近红色的颜色替换为白色:
magick intermediate.png -fill black -fuzz 30% -opaque yellow -fill white -opaque red result.png
显然将-fill white
更改为-fill "gray(180)" if you want the background uniform, or add
阈值50%`:
如果由于某种原因不想使用wand
,则可以使用my answer here量化到相同的特定4色调色板。