cv2.imread()读取不了中文路径,但是cv2.imdecode可以解码
def readimg(filename, mode=-1):
# 解决中文路径问题
raw_data = np.fromfile(filename, dtype=np.uint8)
img = cv2.imdecode(raw_data, mode)
return img
拓展:
cv2.imdecode(…)/cv2.imencode(…)传入参数为包含图像文件内容的内存buffer,为整个文件的内容,包含格式说明、图像数据等等,并非只有图像像素数据。
语法如下:
<1> imdecode(buf, flags)
buf: 包含图像文件的buffer
flags: 以何种形式解析图像,与cv2.imread(filename[, flags])中参数一致
返回值: 数据类型为numpy.ndarray的图像,与cv2.imread(filename[, flags])中参数一致
<2> imencode(ext, img[, params])
ext: 图像后缀,".bmp"、".jpg"等cv2模块支持的图像格式
img: 数据类型为numpy.ndarray的图像,shape为height× \times× width× \times×channel
params: 图像保存时的参数,与cv2.imwrite(filename, img[, params])中参数一致
返回值: 保存成功时返回长度为2的tuple,第一个元素与cv2.imwrite(…)函数返回值相同,第二个元素为数据类型为numpy.ndarray类型的图像文件内容
文章来源:https://www.toymoban.com/news/detail-848538.html
In [1]: import cv2
In [2]: import numpy as np
# cv2.imdecode(...)
In [3]: img = cv2.imdecode(np.fromfile("C:\\img.bmp", np.uint8), 1)
In [4]: type(img), img.shape
Out[4]: (numpy.ndarray, (331, 500, 3))
# cv2.imencode(...)
In [5]: res = cv2.imencode(".jpg", img)
In [6]: type(res), len(res) In [7]: res[0], type(res[1])
Out[6]: (tuple, 2) Out[7]: (True, numpy.ndarray)
In [8]: res[1].shape
Out[8]: (53585, 1) # 331*500*3 = 496500
# res[1]表示将图像保存为".jpg"文件时,"
# .jpg"文件应该对应的所有内容,数据为np.uint8
# 将res[1]保存到硬盘
res[1].tofile("C:\\out.jpg")
利用编码和解码可以实现不同格式图像的相互转换,bmp/jpg/jpeg/png文章来源地址https://www.toymoban.com/news/detail-848538.html
到了这里,关于opencv的cv2.imread解决中文路径问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!