cv2.imread与cv2.imdecode用法

Posted zy_destiny

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cv2.imread与cv2.imdecode用法相关的知识,希望对你有一定的参考价值。

对于路径中含有中文的图像,直接用cv2.imread读取会报错,上次看到有大佬使用cv2.imdecode就可以正常读取,有点好奇,所以今天来记录下二者用法和区别。

目录

 1.读取图像的两种方式对比

 2.保存图像的两种方式对比

 


 1.读取图像的两种方式对比

  • cv2.imread正常读取影像
import cv2
path = '/data/北京/beijing.png'
img = cv2.imread(path)

运行上述代码,会报错!

  • cv2.imdecode从内存中读取影像
import cv2
path = '/data/北京/beijing.png'
arr = np.fromfile(path, dtype=np.uint8)
img = cv2.imdecode(arr, flags=cv2.IMREAD_COLOR)

运行上述代码,成功!

并且imdecode得到的影像波段顺序是RGB,不是BGR,这是与opencv区别的地方。

函数说明:

np.decode  从内存的缓冲区读取图像

np.fromfile  将文本或二进制文件中数据构造成数组


 2.保存图像的两种方式对比

  • cv2.imwrite 正常读取影像
import cv2
out_path = '/data/北京/beijing.png'
cv2.imwrite(out_path,img)

运行上述代码,会报错!

  • cv2.imdecode从内存中读取影像
import cv2
out_path = '/data/北京/beijing.png'
arr = cv2.imencode('png',img)
out[1].tofile(out_path)

运行上述代码,成功!

 函数说明:

cv2.encode  将图像编码到内存缓冲区中

np.tofile  将数组中的数据以二进制格式写进文件

整理不易,欢迎一键三连!!!

cv2 与 matplotlib 的 Bug

cv2 的 imread 无法读取中文路径

解决方案:

img = cv2.imdecode(np.fromfile(image_path,dtype=np.uint8),cv2.IMREAD_COLOR) # 解决无法取得中文路径问题

matplotlib 的 imread 无法读取 .png 格式图片

解决方案,暂无。

以上是关于cv2.imread与cv2.imdecode用法的主要内容,如果未能解决你的问题,请参考以下文章

cv2 与 matplotlib 的 Bug

opencv 读取和写入路径有汉字的处理方法

imageio 载入 Buffer 格式的图片

dgango 报错: Timeout when reading response headers from daemon process

PIL Image.open 和 cv2.imdecode 的区别

模块cv2的用法