Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 16, 2013 15:59:31

Runnko
Зарегистрирован: 2013-10-16
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

RGB to YCbCr

Доброго времени суток.

Имеется:

import Image
class PreImage(object):
    ''' input_image - buffer for input image
      width, height - sizes of input image
      output_color_space - buffer for image which contain some color space
      RGB2YCbCr() - function for convert RGB into YCbCr
      convert() - function for convert from one color space to another
    '''
def __init__(self, input_image_name):
    self.input_image = Image.open(input_image_name)
    self.width, self.height = self.input_image.size
    size = self.input_image.size
    self.output_color_space = Image.new("RGB", size)
    self.output_grey_scale = Image.new("RGB", size)
def RGB2YCbCr(self,rgb):
    cbcr = [0,0,0]
    cbcr[0] = int(0.299*rgb[0] + 0.587*rgb[1] + 0.114*rgb[2]) # Y
    cbcr[1] = int((rgb[2] - cbcr[0])*0.564 + 128) # Cb
    cbcr[2] = int((rgb[0] - cbcr[0])*0.713 + 128) # Cr
    return cbcr
def convert(self):
    cbcr = [0,0,0]
    for i in range(self.height):
         for j in range(self.width):
              rgb = self.input_image.getpixel((j, i))
              cbcr = self.RGBYCbCr(rgb)
              self.output_color_space.putpixel((j, i), tuple(cbcr))
    self.output_color_space.save("Result.jpg", "JPEG")
a = PreImage("RGB.jpg")
a.convert()

Результат не тот, что я ожидал. Хотелось бы понять, что я не так сделал и как из YCbCr 444 сделать 422. И если можно сделать проще, то я был бы не прочь увидеть пример.

Еще подсказали:
from subprocess import Popen
import Image
Popen(['convert', '-colorspace', 'YCbCr', '-sampling-factor', '4:2:2', 'Test.png', 'Test1.png']).wait()

Но как можно легко догадаться, это не особо мне помогло понять, чем же эти два файла отличаются и работает ли это, единственное, что я явно заметил, что RGB файл весил меньше, чем YCbCr 4:2:2.
Был бы благодарен за объяснения, как я понял, тут видимо используется какой-то внешний кодек.

Еще интересует вопрос, что же возвращает Image.convert(“YCbCr”) в PIL.

Заранее спасибо.

Прикреплённый файлы:
attachment Test.zip (96,9 KБ)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version