文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

快速解决cv2.imread()读取图像为BGR的问题

2024-04-02 19:55

关注

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许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯