2022-05-01 python opencv 读取图片返回None

opencv 读取图片返回None,但是不报错

原因

  • 可能是因为路径中有中文导致的
  • 也可能是图片格式有误。图片名称虽然是png、jpg或者jpeg。实际的图片格式可能是gif等。opencv读取gif时候会出错

路径中有中文的解决方法

借助numpy读取之后,转为opencv 的图片格式

读取图片

import os
import numpy as np
import cv2

img = cv2.imdecode(np.fromfile(os.path.join(img_dir, file_name), dtype=np.uint8), -1)

opencv imread和imdecode 最后一个参数flag的取值如下
IMREAD_ANYCOLOR : 4
IMREAD_ANYDEPTH : 2
IMREAD_COLOR : 1
IMREAD_GRAYSCALE : 0
IMREAD_IGNORE_ORIENTATION : 128
IMREAD_LOAD_GDAL : 8
IMREAD_REDUCED_COLOR_2 : 17
IMREAD_REDUCED_COLOR_4 : 33
IMREAD_REDUCED_COLOR_8 : 65
IMREAD_REDUCED_GRAYSCALE_2 : 16
IMREAD_REDUCED_GRAYSCALE_4 : 32
IMREAD_REDUCED_GRAYSCALE_8 : 64
IMREAD_UNCHANGED : -1

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.imencode('.jpg', img)[1].tofile(savePath) 

图片格式问题

使用PIL把图片从gif转为一般图片

import os
from PIL import Image

img = Image.open(os.path.join(img_dir, file_name)).convert('RGB')
img.save(os.path.join('imgs1', file_name))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容