標準のトゥルーカラーイメージと単一の24ビットRGBカラー(0〜255の3つの数字)を取り込むプログラムを作成します。入力画像を修正(または同じ寸法の新しい画像を出力)して、その平均色が入力された正確な単一色になるようにします。これを実現するために、入力画像のピクセルを自由に変更できますが、目標は色の変化を視覚的にできるだけ目立たないようにすることです。
RGB画像の平均色は、実際には各カラーチャネルに1つずつ、3つの算術平均のセットです。平均の赤の値は、画像内のすべてのピクセルの赤の値を合計ピクセル数(画像領域)で割ったものを、最も近い整数に切り捨てたものです。緑と青の平均は同じ方法で計算されます。
この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)のいずれかの平均色入力でテスト画像を投稿してください。(これより多くの例を投稿することは問題ありませんし、推奨されます。)