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))



  • 相关阅读:
    前端下拉框
    使用Redis的有序集合实现排行榜功能
    python--list,str,dict,json,tuple互换用法实例
    微信支付
    C++创建及访问动态对象
    C++动态持久内存分配(new)
    C++函数与指针
    C++数组与指针
    C++指针基础
    MySQL再安装
  • 原文地址:https://www.cnblogs.com/xiaoyh/p/12206617.html
Copyright © 2011-2022 走看看