• matplotlib、PIL、cv2图像操作 && caffe / tensorflow 通道顺序


    python进行图像处理中分别用到过matplotlib.pyplot、PIL、cv2三种库,这三种库图像读取和保存方法各异,并且图像读取时顺序也有差异,如plt.imread和PIL.Image.open读入的都是RGB顺序,而cv2.imread读入的是BGR顺序。使用时需要倍加注意。

    现参考http://www.jianshu.com/p/3977d674da85。对这三种库图像读取保存进行梳理。与原参考资源有一定差异。当前使用为python3.5版本。

    读取图像

    1.matplotlib.pyplot

    matplotlib读取进来的图片是unit8,0-255范围。

    2.PIL.image.open

    PIL是有自己的数据结构的,但是可以转换成numpy数组,转换后的数组为unit8,0-255

    3.cv2.imread

    opencv读进来的是numpy数组,类型是uint8,0-255。

    4.plt.imread和PIL.Image.open读入的都是RGB顺序,而cv2.imread读入的是BGR顺序。使用时需要倍加注意。

    显示图像

    均用plt.imshow(img):因为opencv读取进来的是bgr顺序呢的,而imshow需要的是rgb顺序,因此需要先反过来plt.imshow(img[..., -1::-1])。

    保存图像

    1 PIL.image - 保存PIL格式的图片

    img.save("1.jpg")

    2.cv2.imwrite - 保存numpy格式的图片

    cv2.imwrite("1.jpg")

    OpenCV读取的图片从BGR转换为RGB

    import cv2

    img=cv2.imread(‘imagename’)

    方法一

    b,g,r=cv2.split(img)

    img2=cv2.merge([r.g.b])

    方法二

    img2=img[: , : , : : -1]

    - 显示
    b,g,r = cv2.split(img)
    img_rgb = cv2.merge([r,g,b])
    plt.figure()
    plt.imshow(img_rgb)
    plt.show()

    - caffe / tensorflow 通道顺序问题

    img = np.transpose(img, (0, 2, 3, 1))
     
    img = img.reshape(img.shape[0], img.shape[2], img.shape[3], img.shape[1])
     
    img_new = zeros((img.shape[0], img.shape[2], img.shape[3], img.shape[1]), dtype = np.float32)
    for c in range(0, img.shape[1]):
        for i in range(0, img.shape[2]):
            for j in range(0, img.shape[3]):
                img_new[:,c,i,j] = img_new[:,i,j,c] 



  • 相关阅读:
    CSS复合选择器
    CSS样式规则及字体样式
    jQuery 样式操作
    jQuery 选择器
    jQuery 的基本使用
    jQuery 介绍
    本地存储
    移动端常用开发框架
    移动端常用开发插件
    移动端click 延时解决方案
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/10278234.html
Copyright © 2020-2023  润新知