Как лучше всего отображать каждый канал ycbcr изображения отдельно в Python с помощью numpy, scipy, skimage и т. Д.?
ОБНОВЛЕНО: эта функция должна принимать
import numpy as np
import matplotlib.pyplot as plt
from skimage import color
def plot_ycbcr(a):
b = color.rgb2ycbcr(a) # we assume the input image is in RGB--if not, this will
# not give the correct output
b = b.astype(int)
plt.figure()
for i in range(3):
plt.subplot(1,3,i+1)
temp = np.zeros(b.shape,dtype=b.dtype)
temp[:,:,i] = b[:,:,i]
plt.imshow(color.ycbcr2rgb(temp))
Кажется, это должно сработать, но по какой-то причине, когда я пытаюсь преобразовать обратно в rgb, я получаю очень крошечные (e-10) числа с плавающей запятой, как положительные, так и отрицательные. Насколько я знаю, изображения RGB даже не должны иметь отрицательных значений ... что здесь происходит и как я могу это исправить?
СТАРЫЙ ПОЧТ:
def plot_ycbcr(a):
b = color.rgb2ycbcr(a) # we assume the input image is in RGB--if not, this will
# not give the correct output
plt.figure()
for i in range(3):
plt.subplot(1,3,i+1)
temp = np.zeros(b.shape,dtype=b.dtype)
temp[:,:,i] = b[:,:,i]
plt.imshow(temp)
Это основано на аналогичной функции, которая отображает каждый канал RGB изображения. С этим было легко, потому что
Я подумал, что я мог бы передать какой-нибудь kwarg, чтобы изменить режим кодирования изображения, но мне не удалось найти такую вещь. Я знаю, что могу найти обходной путь, конвертируя каналы по отдельности или что-то в этом роде, но это звучит как головная боль. Так как же проще всего получить их в YCbCr? Можно ли это сделать, используя только импортированные мной библиотеки (и, возможно, scipy)?