• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    快速解决cv2.imread()读取图像为BGR的问题
    POST TIME:2021-10-18 14:34

    opencv读取图像为b,g,r方法,比如

    img = cv2.imread("xx.jpg")
    cv2.imshow("xx",img)

    展示的结果是正常的:

    但是此时读取到的img已经为bgr方式了,如果我们再用其他使用rgb方式读取的函数进行读取时就会出错,比如我用plt对图像进行显示,效果如下:

    因为plt函数是rgb方式读取的,所以会出错。这时我们可以手动改变img的通道顺序,如下:

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

    这时img_rgb就是rgb顺序的了.那么这时再用cv2.imshow()显示出来,rgb错误:

    补充:盘点踩过的关于cv2 和PIL 图像读取的一些小坑

    1、首先像素读取顺序不同

    PIL 读取图像时的像素顺序是标准的RGB

    from PIL import Image
    img = Image.open("test.jpg")
    print img.size
    print img.getpixel((0,0))

    输出结果是

    (533, 800)
    (217, 229, 225)

    cv2 读取图像时的像素顺序是标准的BGR

    img = cv2.imread(""test.jpg"")
    print img.shape
    print img[0][0]

    输出结果是

    (800, 533, 3)
    [225 229 217]

    若要cv2读取完图像也是RGB格式,则按如下方法

    img = cv2.imread(""test.jpg"")[..., ::-1]
    print img.shape
    print img[0][0]

    输出结果是

    (800, 533, 3)
    [217 229 225]

    和用PIL 读取完的一致

    2、cv2 图像读取方法的参数解释

    首先我们先来看一下这个函数的定义

    def imread(filename, flags=None)

    filename

    参数传入的是图像路径,支持解析的图像格式基本上覆盖全了

    - Windows bitmaps - \*.bmp, \*.dib (always supported)
    - JPEG files - \*.jpeg, \*.jpg, \*.jpe (see the *Note* section)
    - JPEG 2000 files - \*.jp2 (see the *Note* section)
    - Portable Network Graphics - \*.png (see the *Note* section)
    - WebP - \*.webp (see the *Note* section)
    - Portable image format - \*.pbm, \*.pgm, \*.ppm \*.pxm, \*.pnm (always supported)
    - Sun rasters - \*.sr, \*.ras (always supported)
    - TIFF files - \*.tiff, \*.tif (see the *Note* section)
    - OpenEXR Image files - \*.exr (see the *Note* section)
    - Radiance HDR - \*.hdr, \*.pic (always supported)
    - Raster and Vector geospatial data supported by GDAL (see the *Note* section)

    flags

    @param flags Flag that can take values of cv::ImreadModes
    

    Flags指定了所读取图片的颜色类型, 默认值为1

    对应值为 -1 到 4

    参数 Value
    IMREAD_UNCHANGED If set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
    IMREAD_GRAYSCALE If set, always convert image to the single channel grayscale image.
    IMREAD_COLOR If set, always convert image to the 3 channel BGR color image.
    IMREAD_ANYDEPTH If set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
    IMREAD_ANYCOLOR If set, the image is read in any possible color format.
    IMREAD_LOAD_GDAL If set, use the gdal driver for loading the image.
    参数 Value
    flag=-1时 8位深度,原通道
    flag=0 8位深度,1通道
    flag=1 8位深度 ,3通道
    flag=2 原深度,1通道
    flag=3 原深度,3通道
    flag=4 8位深度 ,3通道

    IMREAD_UNCHANGED :不进行转化,比如保存为了16位的图片,读取出来仍然为16位。

    IMREAD_GRAYSCALE :进行转化为灰度图,比如保存为了16位的图片,读取出来为8位,类型为CV_8UC1。

    IMREAD_COLOR :进行转化为三通道图像。

    IMREAD_ANYDEPTH :如果图像深度为16位则读出为16位,32位则读出为32位,其余的转化为8位。

    IMREAD_ANYCOLOR

    IMREAD_LOAD_GDAL :使用GDAL驱动读取文件,GDAL(Geospatial Data Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • opencv-python的RGB与BGR互转方式
    • 解决python cv2.imread 读取中文路径的图片返回为None的问题
    • Python实现计算图像RGB均值方式
    上一篇:python 非递归解决n皇后问题的方法
    下一篇:python中的opencv和PIL(pillow)转化操作
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信