对文件读取:https://blog.csdn.net/lilong117194/article/details/82563723
对rgb的数据顺序的变化:https://blog.csdn.net/weixin_41813620/article/details/93197954
几种图片:https://www.zhihu.com/question/67157462/answer/251754530
编码:https://editor.csdn.net/md/?articleId=104158821,
https://www.cnblogs.com/chaojiyingxiong/p/9822444.html
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)
2 先使用numpy修改编码方式cv2.imdecode
参考:https://blog.csdn.net/qq_36387683/article/details/91949575?
cv2.imdecode()函数从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。
**cv2.imencode()**函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输。
参考:https://blog.csdn.net/qq_30683995/article/details/95477306
# 只能读取英文字符路径的图片
cv2.imread(image_path)
# 只能保存英文路径和名称的图片
cv2.imwrite(output_image_path, img_mat)
#读取图片,即使图片的路径中包含了中文字符,内存中的缓冲区读取图像
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
# 可以保存成中文文字符路径的图片,将图像编码到内存缓冲区中
# img_mat是cv2读取图片的BGR格式uint8 ndarray,out_path注意转义字符
# 前面编码的.jpg,表示对输出图片的编码方式
cv2.imencode('.jpg', img_mat)[1].tofile(out_pathimg_name.jpg)
cv2.imencode('.jpg', img_mat)# 输入是如下图,所以使用[1]将保存的图片数据提取
3 ,plt.imread对中文字符路径的读取
关键是plt.imread能够处理路径中的中文字符,返回图片的矩阵,然后通过cv2对像素通道进行修改显示,但这种修改是错误的,因为plt.imread返回的数据的图片就是以rgb顺序的,不需要在进行顺序处理,实际经过plt.imread()后就可以使用plt进行正常显示了
from imutils import paths
import cv2
img = plt.imread(path) # path就是中文路径的图片,返回RGB顺序的图片
c = a[..., ::-1] # 三通道彩色图片,加入这一步再进行图的转化和显示就正常了
img_rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow("picture",img)
cv2.waitKey(0)



