处理opencv里用plt显示imread读取图像偏色问题

2022年6月27日 24点热度 0人点赞

使用opecv过程中经常需要使用plt输出图片作为前后对比,方便观察。但是会出现plt显示时,颜色偏差严重的情况。这是因为plt和imread二者颜色通道不同导致。

工具/原料

  • pycharm+win7环境
  • opencv3+ python3

方法/步骤

  1. 1

    首先通过imread读入源图并显示。

    import cv2   as  cvimport numpy as npimport copyimport randomfrom matplotlib import pyplot as plt# cv.imread 读取图像格式为b,g,rimg = cv.imread('c:\\meiping1.png')cv.imshow("img",img)

  2. 2

    然后 采用plt方法进行显示。

    把imread生成的img使用plt输出。

    plt.imshow(img)plt.show()

    结果发现出现严重偏色。

  3. 3

    原因:

    cv.imread 读取图像格式为b,g,r

    但是 plt显示按照 rgb次序!因此要转换一下。

  4. 4

    解决方法:

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

    img_rgb = cv.merge([r,g,b])

    先分离 调整此序后,合并。

  5. 5

    整体代码:

    import cv2   as  cv

    import numpy as np

    import copy

    import random

    from matplotlib import pyplot as plt

    # imread的第二个参数

    # 无 代表是原图,

    # 等于1代表是灰度图

    # 大于1彩色图

    # cv.imread 读取图像格式为b,g,r

    img = cv.imread('c:\\meiping1.png')

    cv.imshow("img<1",img)

    #如果本身是彩图 似乎也没什么影响!

    img = cv.imread('c:\\meiping1.png', 1)

    cv.imshow("img=1",img)

    img = cv.imread('c:\\meiping1.png', 3)

    cv.imshow("img>1",img)

    plt.imshow(img)

    plt.show()

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

    img_rgb = cv.merge([r,g,b])

    plt.figure()

    #plt显示按照 rgb次序!因此要转换

    plt.imshow(img_rgb)

    plt.show()

    cv.waitKey(0)

    附图为转化后 plt显示效果

    END

注意事项

  • plt显示按照 rgb次序 imread BGR次序
  • 本文实现在 pycharm+win7+opencv3+ python3
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论