• python中图片读取和保存以及plt.imshow()与cv2.imshow()显示图像颜色错误解决方案


    最近调试程序的时候,发现要保存的图片颜色与原图片有色差(显示图像变蓝),郁闷良久,终于发现问题,望诸君避坑。

    🧸在用plt.imshow和cv2.imshow显示同一幅图时可能会出现颜色差别很大的现象。
    🎯原因:opencv的接口使用BGR,而matplotlib.pyplot 则是RGB模式。
    单独使用图像是正常的,联合使用显示是不正常的。
    下面我们根据程序结合结果来看:

    原图:
    在这里插入图片描述

    1.程序源码

    import cv2 as cv
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = cv.imread('road.jpg')  # CV 读取图片
    img2 = plt.imread('road.jpg')  # plt 读取图片
    img3 = cv.cvtColor(img, cv.COLOR_BGR2RGB)   # CV  BGR转变RGB
    img4 = cv.cvtColor(img2, cv.COLOR_BGR2RGB)  # Plt BGR转变RGB
    
    # Plt
    plt.imshow(img)
    plt.savefig('cv_read_plt_show.jpg')
    plt.show()
    
    plt.imshow(img2)
    plt.savefig('plt_read_plt_show.jpg')
    plt.show()
    
    plt.imshow(img3)
    plt.savefig('cv_read_plt_show_BGR2RGB.jpg')
    plt.show()
    
    plt.imshow(img4)
    plt.savefig('plt_read_plt_show_BGR2RGB.jpg')
    plt.show()
    
    # CV
    cv.namedWindow("bgr_image", 0)
    cv.resizeWindow("bgr_image", 512, 768)
    cv.imshow('bgr_image', img)
    cv.imwrite('cv_read_cv_show.jpg',img)
    
    cv.namedWindow("rgb_image", 0);
    cv.resizeWindow("rgb_image", 512, 768)
    cv.imshow('rgb_image', img2)
    cv.imwrite('plt_read_cv_show.jpg',img2)
    
    cv.namedWindow("cv_read_BGR2RGB_image", 0);
    cv.resizeWindow("cv_read_BGR2RGB_image", 512, 768)
    cv.imshow('cv_read_BGR2RGB_image', img3)
    cv.imwrite('cv_read_cv_show_BGR2RGB.jpg', img3)
    
    cv.namedWindow("plt_read_BGR2RGB_image", 0);
    cv.resizeWindow("plt_read_BGR2RGB_image", 512, 768)
    cv.imshow('plt_read_BGR2RGB_image', img4)
    cv.imwrite('plt_read_cv_show_BGR2RGB.jpg', img4)
    
    # cv.waitKey(0)
    # cv.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    2.程序运行结果如下:

    2.1 Matplotlib显示结果:

    2.2.1 CV读取BGR,显示:

    在这里插入图片描述

    2.2.2 Matplotlib读取RGB,显示:

    在这里插入图片描述

    2.2.3 CV读取BGR转换为RGB,显示:

    在这里插入图片描述

    2.2.4 plt读取RGB,CV转换为RGB,显示:

    在这里插入图片描述

    2.2OpenCV显示结果:

    2.2.1 CV读取BGR,显示:

    在这里插入图片描述

    2.2.2 Matplotlib读取RGB,显示:

    在这里插入图片描述

    2.2.3 CV读取BGR转换为RGB,显示:

    在这里插入图片描述

    2.2.4 plt读取RGB, CV转换为RGB,显示:

    在这里插入图片描述

  • 相关阅读:
    TCP三次握手四次挥手简介
    回归预测 | Matlab实现OOA-HKELM鱼鹰算法优化混合核极限学习机多变量回归预测
    【机器学习】 逻辑回归算法:原理、精确率、召回率、实例应用(癌症病例预测)
    面了个拿 30K 出来的测试,见识到了什么叫真正的测试天花板
    分库分表总结
    微软掀起生产力革命!GPT-4o 重塑 Windows,奥特曼新模型剧透登场
    Python毕业设计选题推荐
    【网易云信】音画同步测试方法的研究与实践
    数独C++代码实现
    验收测试的内容和流程有哪些?
  • 原文地址:https://blog.csdn.net/qq_41931453/article/details/125908061