找到了!把图像染上葱色的方法!

一種調色方法,基於RGB理論。
我嬾得說太多了抱歉。

Goal

例如把圖片變換爲亦即染色為葱色#39c5bb

Program

聲明模塊:

Python
1
2
3
import numpy as np
import keras
from keras.preprocessing import image as img

其中:

模塊 版本
Anaconda 5.2.0
Python 3.6.5
NumPy 1.14.3
TensorFlow 1.11.0
Keras 2.1.6

先計算色相的偏差值:

Python
1
2
class Constants(object):
DEV = (0xbb - 0x39) / (0xc5 - 0x39)

導入需要的圖片並轉化爲張量:

Python
1
2
rawimg = img.load_img("./Windows.jpeg")
rawarr = img.img_to_array(rawimg)

此處需要審察待變換圖像的主體是否大部分為黑白,分爲兩種情況:

  1. 如若主體大部分為黑白色,則需要在保持亮度不變的前提下,先把最大值(偏白色)拉到最亮或者把最小值(偏黑色)拉到最暗,然後中間量由最大與最小值的綫性組合得到,類似定比分點:

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    def transcolor(rawcolor):
    elesum = rawcolor.max() + rawcolor.min()
    if elesum <= 255:
    elemin, elemax = 0, elesum
    else:
    elemin, elemax = elesum - 255, 255
    elemid = (1 - DEV) * elemin + DEV * elemax
    return np.array([ elemin, elemax, elemid ])
  2. 否則可以直接計算中間量:

    Python
    1
    2
    3
    4
    5
    def transcolor(rawcolor):
    elemax = rawcolor.max()
    elemin = rawcolor.min()
    elemid = (1 - DEV) * elemin + DEV * elemax
    return np.array([ elemin, elemax, elemid ])

新建一個零張量,並用剛才定義的函數對每個像素點進行顔色變換,然後保存爲新的圖片:

Python
1
2
3
4
5
6
newarr = np.zeros(rawarr.shape)
for k in range(rawarr.shape[0]):
for l in range(rawarr.shape[1]):
newarr[k, l] += transcolor(rawarr[k, l])
newimg = img.array_to_img(newarr)
newimg.save("./Winmiku.jpeg")

Samples

更多的例子:

  1. Leo/need的logo

  2. livetune(kz)的logo,此前已經嵌入了MNIST的圖像

  3. Hachioji-P的logo