编写一个程序,以获取标准的真彩色图像和单一的24位RGB颜色(0到255之间的三个数字)。修改输入图像(或输出具有相同尺寸的新图像),使其平均颜色恰好是输入的单色。您可以按照自己喜欢的任何方式修改输入图像中的像素,但目的是使颜色变化在视觉上尽可能不明显。
RGB图像的平均颜色实际上是一组三个算术平均值的集合,每个颜色通道对应一个。平均红色值是图像中所有像素上的红色值之和除以像素总数(图像区域),四舍五入到最接近的整数。绿色和蓝色平均值的计算方法相同。
这个Python 2(带有PIL)脚本可以计算大多数图像文件格式的平均颜色:
from PIL import Image
print 'Enter image file'
im = Image.open(raw_input()).convert('RGB')
pixels = im.load()
avg = [0, 0, 0]
for x in range(im.size[0]):
for y in range(im.size[1]):
for i in range(3):
avg[i] += pixels[x, y][i]
print 'The average color is', tuple(c // (im.size[0] * im.size[1]) for c in avg)
(类似的还有平均颜色方案在这里,但他们不一定做同样的计算。)
程序的主要要求是,对于任何输入图像,其相应输出的平均颜色必须与输入的颜色完全匹配-由Python代码段或某些等效代码判断。输出图像还必须具有与输入图像完全相同的尺寸。
因此,从技术上讲,您可以提交一个程序,该程序仅对整个输入进行着色以指定的平均颜色(因为平均值始终是该颜色),但这是一场人气竞赛 -投票数最高的提交将获胜,这很简单提交不会给您带来很多赞成。利用人类视觉中的怪癖,缩小图像并在其周围绘制彩色边框等新颖的想法(希望)能使您获得投票。
请注意,平均颜色和图像的某些组合需要非常明显的颜色变化。例如,如果要匹配的平均颜色为黑色(0,0,0),则任何输入图像都必须设为全黑,因为如果任何像素的值都为非零,那么它们也将使平均值也为非零(排除舍入误差)。投票时请牢记这些限制。
测试影像
某些图像及其默认的平均颜色可供选择。点击查看原图。
A.平均(127,127,127)
从fejesjoco的各种颜色 的图片回答。在他的博客上找到了原件。
B.平均(62,71,73)
C.平均值(115、112、111)
D.平均(154,151,154)
E.平均值(105、103、102)
沙斯塔山。由我提供。
F.平均(75,91,110)
笔记
- 程序使用的确切输入和输出格式以及图像文件类型无关紧要。只要确保清楚如何使用您的程序即可。
- 如果图像已经具有目标平均颜色,则应该按原样输出,这可能是一个好主意(但从技术上讲不是要求)。
- 请发布平均色彩输入为(150、100、100)或(75、91、110)的测试图像,以便投票者可以在不同解决方案中看到相同的输入。(发布更多的示例比这还好,甚至可以鼓励。)