我正在使用调整图像的大小,skimage.transform.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)
这是我的输入图像y(240、320、3):
这是我的输出图像x(256、341、3):
编辑:好的,如果我更改,它似乎工作正常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
函数来检索帧,然后将输出的列表转换为numpy数组:
batch_frames = map(lambda vid: read_random_frames(vid), train_vids_batch)
frame_tensor = np.asarray(batch_frames)
y = frame_tensor[0]
我认为这仅仅是因为保留该范围,最终我得到了[0,255]范围内的浮点数,而pyplot.imshow
只能显示[0.0,1.0]范围内的MxNx3浮点数组。当我使用z = np.copy(x).astype('uint8')
它将输出转换为uint8时,显示效果很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句