python视频读取的frame帧的通道RGB or BGR??

如何将VideoCapture()读到的frame图片转变成PIL的Image图片格式或numpy格式,对opencv读取图片的颜色空间和数据格式不清楚?
先上结论:

图片读取函数 读取结果类型 颜色空间
cv2.imread() numpy.ndarray BGR
cv2.VideoCapture() numpy.ndarray BGR
PIL(Python Image Library) PIL.Image.Image RGB

opencv读取的图片不管是视频帧还是图片都是矩阵形式,即np.array,转PIL.Image格式用PIL.Image.fromarray()函数即可。

cap = cv2.VideoCapture(VIDEO_PATH)
while(1):
    ret,frame =cap.read()
    if ret==True:
        print (type(frame))            #结果为numpy.ndarray
         import matplotlib.pyplot as plt
         from PIL import Image
         plt.imshow(frame)             #显示为BGR
         plt.show()  
         frame2 = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
         plt.imshow(frame2)            #显示为RGB正常色
         plt.show()
         cv2.imwrite('1.jpg', frame)   # cv2.imwrite只有对frame为BGR空间时,才写出正确颜色空间图片
         cv2.imwrite('2.jpg', frame2)  # 存储出来的图片2.jpg颜色不正常
         image = Image.fromarray(frame2)
         image.show()                  #Image为RGB空间显示正常

frame的type()为np.array,颜色空间为BGR,使用时要注意。

你可能感兴趣的:(个人笔记,Python编程)