大部分人使用imdecode函数打开图像文件是因为 opencv中的imread函数无法打开中文估路径下的图像文件,网上使用imdecode函数打开图片的语法有很多这里简单列举一些:
方法一:
def cv_imread(file_path = ""):
file_path_gbk = file_path.encode('gbk') # unicode转gbk,字符串变为字节数组
img_mat = cv2.imread(file_path_gbk.decode()) # 字节数组直接转字符串,不解码
return img_mat
方法二:
import os
def cv_imread(file_path):
root_dir, file_name = os.path.split(file_path)
pwd = os.getcwd()
if root_dir:
os.chdir(root_dir)
cv_img = cv2.imread(file_name)
os.chdir(pwd)
return cv_img
方法三:
def cv_img_rgb(path):
#用matplotlib的路径
img=plt.imread(path)
#因为opencv读取是按照BGR的顺序,所以这里转换一下即可
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
return img_rgb
方法四:
def cv_imread(filePath):
cv_img = cv2.imdecode(np.fromfile(filePath, dtype=np.uint8), -1)
return cv_img
但是这些方法都有个问题。就是读取的图片文件都存在偏色问题,如果是灰度图片还会出现图片面目全非的情况。直到我找到下边这个方法:
import cv2
import numpy as np
cv2.imdecode(np.fromfile("D:\\haha哈哈.png",dtype=np.uint8),,cv2.IMREAD_COLOR)
用此方法读取图片文件不仅能读取中文路径下的图片文件,并且不会出现失真的现象。
参考:
[1]https://www.zhihu.com/question/67157462
[2]https://blog.csdn.net/u011311291/article/details/81457278