多语言展示
当前在线:1529今日阅读:27今日分享:41

怎么替换图片中某种特定的颜色?

本文的目标:把下面的图片中的蓝色区域,全部变成红色。但是注意,下面的蓝色,并不是严格意义上的蓝色。
工具/原料
1

电脑

2

Mathematica

方法/步骤
1

用Mathematica查看图片蓝色区域的颜色参数:{0.`, 0.443076`, 0.74117647`}由此可以看出,这不是确实的蓝色。

2

把图片转化为图片数据,以便进一步处理:shuju = ImageData[img]

3

查看图片尺寸:{u, v} = ImageDimensions[img]宽度是500,高度是372。

4

分别对每一个像素进行甄别,把颜色数据等于{0.`, 0.443076`, 0.74117647`}的,全部换成红色:Table[If[shuju[[m, n, All]] == {0.`, 0.443076`, 0.74117647`}, {1, 0, 0}, shuju[[m, n, All]]], {m, 1, 372, 1}, {n, 1, 500, 1}]这是一组新的图片数据。

5

把上面的图片数据转化为图片:%//Image

6

这是怎么回事?为什么还是有大部分区域没有变色?原来,那些蓝色区域的颜色值已经不是{0.`, 0.443076`, 0.74117647`}了。

7

其实,Mathematica还有一个直接替换颜色的函数:ColorReplace[img, Blue -> Red]好吧,没有任何效果。那是因为那不是真正的蓝色啊。

9

ColorReplace[img, Blue -> Red, 0.2]效果更明显了,但是还是有瑕疵。

10

ColorReplace[img, Blue -> Red, 0.3]完全变过来了。

11

ColorReplace[img, Blue -> Red, 0.45]这就有点过分了。

12

还有更过分的呢:ColorReplace[img, Blue -> Red, 0.5]

注意事项

目前看来,最好的效果,就是步骤10里面的图片了。但是,你知道这个的具体算法是什么吗?

推荐信息