2015-12-11 19 views
3

Я изменяю размер изображения, используя skimage.transform.resize, но я получаю действительно странный результат, и я не могу понять, почему. Может ли кто-нибудь помочь?skimage resize дает странный вывод

Вот мой код:

import matplotlib.pyplot as plt 
import skimage.transform 
plt.imshow(y) 
h,w,c = y.shape 
x = skimage.transform.resize(y, (256, (w*256)/h), preserve_range=True) 
plt.imshow(x) 

Вот мой входное изображение у (240, 320, 3):

enter image description here

Вот мой вывод изображения х (256, 341, 3):

enter image description here

Редактировать: Хорошо, что это нормально работает, если я изменю preserve_range=False. Но почему это не позволит мне сохранить текущий диапазон?

Редактировать: Я случайно искал кадры из видео с помощью OpenCV. Вот функция, которая возвращает кадр из пути передачи видео, которое я передаю ему.

def read_random_frames(vid_file): 

    vid = cv2.VideoCapture(vid_file) 
    # get the number of frames  
    num_frames = vid.get(cv2.CAP_PROP_FRAME_COUNT) 
    # randomly select frame 
    p_frame = random.randint(0, (num_frames-1)) 
    # get frame 
    vid.set(cv2.CAP_PROP_POS_FRAMES, p_frame) 
    ret, frame = vid.read() 
    # convert from BGR to RGB 
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) 

    return frame 

У меня есть список видео дорожек и я использую map функцию для извлечения кадров, то я преобразовать outputed список в Numpy массива:

batch_frames = map(lambda vid: read_random_frames(vid), train_vids_batch) 
frame_tensor = np.asarray(batch_frames) 
y = frame_tensor[0] 

ответ

1

Я считаю, что это просто потому, что, сохраняя диапазон я в конечном итоге с плавающей точкой в ​​диапазоне [0, 255], тогда как pyplot.imshow способен только отображать MxNx3 с плавающей точкой массивы в диапазоне [0,0, 1,0]. Когда я конвертирую вывод в uint8, используя z = np.copy(x).astype('uint8'), он отображает штраф.

0

Можете ли вы предоставить полный пример? Как вы читаете данные своего изображения, какой исходный формат? (Используя y = scipy.misc.imread("somefile.png") на .png-файле, он отлично работает на моей машине)

Каковы данные (и ndarray.dtype) ваших данных?

import matplotlib.pyplot as plt 
import skimage.transform 
from scipy.misc import imread 

y = imread("tree.png") 

plt.subplot(121) 
plt.imshow(y) 
h,w,c = y.shape 
x = skimage.transform.resize(y, (256, (w*256)//h), preserve_range=True) 
plt.subplot(122) 
plt.imshow(x) 
plt.show() 
Смежные вопросы