imread(如何使用cv2.imread读取BGR图像)

发布时间:2025-12-11 02:26:50 浏览次数:2

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

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

因为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

fromPILimportImageimg=Image.open("test.jpg")printimg.sizeprintimg.getpixel((0,0))

输出结果是

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

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

img=cv2.imread(""test.jpg"")printimg.shapeprintimg[0][0]

输出结果是

(800,533,3)[225229217]

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

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

输出结果是

(800,533,3)[217229225]

和用PIL 读取完的一致

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

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

defimread(filename,flags=None)

filename

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

-Windowsbitmaps-\*.bmp,\*.dib(alwayssupported)-JPEGfiles-\*.jpeg,\*.jpg,\*.jpe(seethe*Note*section)-JPEG2000files-\*.jp2(seethe*Note*section)-PortableNetworkGraphics-\*.png(seethe*Note*section)-WebP-\*.webp(seethe*Note*section)-Portableimageformat-\*.pbm,\*.pgm,\*.ppm\*.pxm,\*.pnm(alwayssupported)-Sunrasters-\*.sr,\*.ras(alwayssupported)-TIFFfiles-\*.tiff,\*.tif(seethe*Note*section)-OpenEXRImagefiles-\*.exr(seethe*Note*section)-RadianceHDR-\*.hdr,\*.pic(alwayssupported)-RasterandVectorgeospatialdatasupportedbyGDAL(seethe*Note*section)

flags

@paramflagsFlagthatcantakevaluesofcv::ImreadModes

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

对应值为 -1 到 4

参数Value
IMREAD_UNCHANGEDIf set, return the loaded image as is (with alpha channel, otherwise it gets cropped).
IMREAD_GRAYSCALEIf set, always convert image to the single channel grayscale image.
IMREAD_COLORIf set, always convert image to the 3 channel BGR color image.
IMREAD_ANYDEPTHIf set, return 16-bit/32-bit image when the input has the corresponding depth, otherwise convert it to 8-bit.
IMREAD_ANYCOLORIf set, the image is read in any possible color format.
IMREAD_LOAD_GDALIf set, use the gdal driver for loading the image.
参数Value
flag=-1时8位深度,原通道
flag=08位深度,1通道
flag=18位深度 ,3通道
flag=2原深度,1通道
flag=3原深度,3通道
flag=48位深度 ,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许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。

关于如何使用cv2.imread()读取BGR图像就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

imread
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477