以下代码在Windows上运行良好,但我需要在Ubuntu上运行它,而
我尝试用
cv2.imshow()
似乎不被支持。我正在寻找一种替代方法,使用matplotlib或任何其他在Ubuntu上运行的库。
它的工作原理如下:
我有一个帧列表,其中每个帧都是表示RGB图像的numpy
数组。我循环遍历这些帧,在当前帧中显示它们,使用cv2.imshow()
并使用waitKey()
注册操作,无论是保留该帧(将其附加到另一个列表中)还是取消。我需要将图像显示在与其他图像相同的窗口中。
代码如下:
"""
frames is a list of 3-d numpy array representing an RGB image.
"""
keeped_frames = []
frame_index = 0
frames_upper_bound = len(frames)
for frame in frames:
print('Showing frame {} / {}'.format(frame_index + 1,frames_upper_bound))
cv2.imshow('frame', frame)
key = cv2.waitKey(0) & 0xFF
if key == ord('0'):
print('Not appending frame {} / {} to list'.format(frame_index + 1, frames_upper_bound))
elif key == ord('1'):
print('Appending frame {} / {} to list'.format(frame_index + 1, frames_upper_bound))
keeped_frames.append(frame)
elif key == ord('q'):
cv2.destroyAllWindows()
break
frame_index += 1
我尝试用
plt.imshow()
在循环中展示图像,但它每次都会创建新的窗口。即使这个问题得到解决,我也怎么能轻松地注册键盘动作并快速切换到下一帧呢?
使用cv2
就可以很好地解决这个问题,我可以按住键盘上的键来快速播放帧;因为需要以这种方式注释成千上万个帧,所以我想要类似的功能。
我能用matplotlib或任何其他在Ubuntu上运行的库复制这种行为吗?