python【OpenCV 】路径中带有中文,cv2.imread读取图像文件时报错cv2.error: OpenCV(3.4.2)

在利用对话框打开文件时,我们不可避免的会遇到中文路径,这就导致在python+OpenCV中读取图像等文件时容易出错,特此记录该问题的解决方法,以便后续查找
正常情况下,如果是路径为全英文,则下面程序可以正常运行
方式一 利用对话框打开文件

import numpy as np
import cv2
# 对话框所需要的库,一般都有,没有的话就删除这两句
# 同时用方法二打开文件
import tkinter as tk
from tkinter import filedialog

# 弹出对话框
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
img = cv2.imread(file_path, 1)
cv2.imshow('img', img)

方法二 打开已知路径的文件

import numpy as np
import cv2

img = cv2.imread(r"C:\Users\JAN\Desktop\lena.bmp", 1)
cv2.imshow('img', img)

但如果路径中有中文就会出现以下错误

Traceback (most recent call last):
  File "C:/Users/JAN/Desktop/实验代码/实验二/OTSU.py", line 15, in <module>
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(3.4.2) c:\miniconda3\conda-bld\opencv-suite_1534379934306\work\modules\imgproc\src\color.hpp:253: error: (-215:Assertion failed) VScn::contains(scn) && VDcn::contains(dcn) && VDepth::contains(depth) in function 'cv::CvtHelper<struct cv::Set<3,4,-1>,struct cv::Set<1,-1,-1>,struct cv::Set<0,2,5>,2>::CvtHelper'

这时候换一个语句就好了

import numpy as np
import cv2
import tkinter as tk
from tkinter import filedialog
import matplotlib.pyplot as plt

root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename()
# 文件路径中带有中文的需要以下面这种方式进行读取文件,否则报错
# file_path可以换为对应的已知路径
img = cv2.imdecode(np.fromfile(file_path, dtype = np.uint8), -1)
cv2.imshow('img', img)

2020.12.6 更新

以上是利用imdecode读取中文路径的文件,今天刚好又看到如果保存文件到中文路径的话,cv2.imwrite也会报错,下面记录下如何保存中文路径图像

import cv2
import numpy as np
 
im_path = 'E:\测试视频01\\frame1.jpg'
#只能用该方法读取含有中文路径的图片
im = cv2.imdecode(np.fromfile(im_path, dtype=np.uint8), -1)
# cv2.imwrite(save_path, im) #仅限于纯英文路径
cv2.imencode('.jpg', im)[1].tofile('E:\测试路径/frameTest.jpg')#英文或中文路径均适用

读取中文路径的文件主要是用imdecode和imencode两个函数,后续有时间再搜集资料整理下这两个函数读取各类文件的文章,毕竟后续我们不一定只读取图像文件

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值