python - पायथन पीआईएल के साथ छवि रंग बदलना




image python-imaging-library (2)

अच्छा प्रश्न। पीआईएल एक एचएसवी या एचएसएल कलरस्पेस में परिवर्तित नहीं होता है, लेकिन यह वह रूपांतरण है जिसे आपको प्रकाश की चमक और छवि में संतृप्ति के बिना रंग बदलने के लिए करने की आवश्यकता होती है।

आपको जो करना है वह एचएसवी में परिवर्तित हो गया है, फिर कुछ एच डिग्री से सभी एच मानों को बढ़ाएं, फिर आरजीबी में वापस कनवर्ट करें।

कुछ समय पहले आपके द्वारा answer (मेरे द्वारा) में आधा काम किया जाता है। यह न्यूमपी नामक एक और पायथन मॉड्यूल को नियोजित करता है और आरजीबी रंगस्थान को एचएसवी में परिवर्तित करता है। रिवर्स रूपांतरण लिखना बहुत मुश्किल नहीं होगा।

पायथन पीआईएल का उपयोग करके, मैं किसी दिए गए चित्र के रंग को समायोजित करने की कोशिश कर रहा हूं।

मैं ग्राफिक्स के शब्दकोष के साथ बहुत सहज नहीं हूं, इसलिए मेरा मतलब "समायोजन रंग" द्वारा किया गया है फ़ोटोशॉप ऑपरेशन “Hue/saturation” कहलाता है: यह छवि के रंग को समान रूप से नीचे दिखाया गया है जैसा कि नीचे दिखाया गया है:

  • मूल:
  • +180 (लाल) में समायोजित रंग के साथ:
  • हू समायोजित -78 (हरा) के साथ:

एफवाईआई, फ़ोटोशॉप इस रंग सेटिंग (जहां -180 +180 के बराबर है) के लिए -180 से +180 के पैमाने का उपयोग करता है, जो एचएसएल ह्यू पैमाने (0-360 डिग्री में व्यक्त) का प्रतिनिधित्व कर सकता है।

जो मैं खोज रहा हूं वह एक ऐसा कार्य है, जिसने एक पीआईएल छवि और [0, 1] के भीतर एक फ्लोट रंग दिया है (या int [0, 360] के भीतर int, इससे कोई फर्क नहीं पड़ता), छवि को इसके रंग के साथ स्थानांतरित कर देता है ऊपर उदाहरण में के रूप में रंग

जो मैंने अभी तक किया है वह हास्यास्पद है और जाहिर है वांछित परिणाम नहीं देता है। यह रंगीन भरे परत के साथ मेरी मूल छवि को केवल आधा मिश्रण करता है।

import Image

im = Image.open('tweeter.png')
layer = Image.new('RGB', im.size, 'red') # "hue" selection is done by choosing a color...
output = Image.blend(im, layer, 0.5)
output.save('output.png', 'PNG')

(कृपया-मत-हंसी-पर-) परिणाम:

अग्रिम में धन्यवाद!

समाधान : यहां unutbu कोड अपडेट किया गया है, इसलिए यह ठीक वही है जो मैंने वर्णित किया है।

import Image
import numpy as np
import colorsys

rgb_to_hsv = np.vectorize(colorsys.rgb_to_hsv)
hsv_to_rgb = np.vectorize(colorsys.hsv_to_rgb)

def shift_hue(arr, hout):
    r, g, b, a = np.rollaxis(arr, axis=-1)
    h, s, v = rgb_to_hsv(r, g, b)
    h = hout
    r, g, b = hsv_to_rgb(h, s, v)
    arr = np.dstack((r, g, b, a))
    return arr

def colorize(image, hue):
    """
    Colorize PIL image `original` with the given
    `hue` (hue within 0-360); returns another PIL image.
    """
    img = image.convert('RGBA')
    arr = np.array(np.asarray(img).astype('float'))
    new_img = Image.fromarray(shift_hue(arr, hue/360.).astype('uint8'), 'RGBA')

    return new_img

पिल्लो की एक हाल की प्रति के साथ, शायद किसी का उपयोग करना चाहिए

def rgb2hsv(image):
    return image.convert('HSV')






hue