zoukankan      html  css  js  c++  java
  • Python中Opencv和PIL.Image读取图片的差异对比

    近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的。

    image = np.array(Image.open(image_file).convert('RGB'))
    image = cv2.imread(image_file)

    上面第一行代码就是导致错误出现的原因,我把代码改成第二行代码模型就能够正确的推理了。(巨坑),以后谨记,在使用Python读取图片的时候最好使用OpenCV来读取。

    下面给出两种方式读取图片具体的差异,内容来自:https://blog.csdn.net/on_theway10/article/details/91814197

    imshow

    1、Opopencv  : cv2.imshow()采用BGR模式,通过cv2.imread()读取;
    2、matplotlib.pyplot  : plt.imshow() 采用RGB模式,   通过plt.imread()读取;
    3、PIL.Image :  img.show()  采用RGB模式, 通过Image.open()读取;img对图片对象
    备注:通过cv2.VideoCapture方法来读取video的frame,得到的frame的通道顺序是BGR的!!!

    下面一组图依次是:img、plt.imshow(cv_img)、Img_img.show()、plt.imshow(plt_img) 

     

     cv2(BGR)

    # img为BGR通道
    img = cv2.imread(img_path, mode) # mode = [1, 0, -1]依次表示彩色、灰度、彩色+alpha, 默认为1;
    cv2.imshow('test', img)
    cv2.waitKey(0) # 保持图形界面,直到你在终端输入任意字符
    cv2.destroyAllWindows()

    PIL.Image(RGB)

    img = Image.open(img_path)
    img.show()

    PIL.Image转Opencv

    cv2_img = cv2.cvtColor(numpy.asarray(Img_img),cv2.COLOR_RGB2BGR)

    Opencv转PIL.Image

    pil_img = Image.fromarray(cv2.cvtColor(cv_img,cv2.COLOR_BGR2RGB))



  • 相关阅读:
    对我最重要的三个老师
    究竟 javascript 错误处理有哪些类型?
    前端小白凭什么杀进 BAT?
    金九银十,换工作热潮来临!
    适用于Java开发人员的SOLID设计原则简介
    在5分钟内将Spring Boot作为Windows服务启动
    Redis中的Java分布式缓存
    Arrays工具类详解
    SpringBoot整合redis
    java 数组用法详解
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/12206617.html
Copyright © 2011-2022 走看看