shaoheshaohe 发表于 2020-12-23 11:48:31

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

1、首先像素读取顺序不同
[*]PIL 读取图像时的像素顺序是标准的RGB
from PIL import Imageimg = Image.open("test.jpg")print img.sizeprint img.getpixel((0,0))
[*]1
[*]2
[*]3
[*]4
输出结果是(533, 800)(217, 229, 225)
[*]1
[*]2

[*]cv2 读取图像时的像素顺序是标准的BGR
img = cv2.imread(""test.jpg"")print img.shapeprint img
[*]1
[*]2
[*]3
输出结果是(800, 533, 3)
[*]1
[*]2

[*]若要cv2读取完图像也是RGB格式,则按如下方法
img = cv2.imread(""test.jpg"")[..., ::-1]print img.shapeprint img
[*]1
[*]2
[*]3
输出结果是(800, 533, 3)
[*]1
[*]2
和用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)
[*]1
[*]2
[*]3
[*]4
[*]5
[*]6
[*]7
[*]8
[*]9
[*]10
[*]11

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

shaoheshaohe 发表于 2020-12-23 11:48:47

https://blog.csdn.net/tanglion/article/details/93898101
页: [1]
查看完整版本: 盘点踩过的关于cv2 和PIL 图像读取的一些小坑