如何在Python中读取含阿拉伯字符的路径?OpenCV读取图片报错
解决OpenCV读取含阿拉伯字符路径图片的问题
问题原因
OpenCV的cv2.imread函数在Windows环境下对包含非ASCII字符(如阿拉伯语)的文件路径支持不佳,它底层调用的是不支持UTF-8的文件读取接口,哪怕路径字符串本身正确,也会导致读取失败,进而触发error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'这类错误——因为imread返回了空对象。
解决方案
改用numpy.fromfile读取文件二进制数据,再通过cv2.imdecode解码成图像,该方式可完美支持UTF-8编码的路径。
修改后的代码如下:
import os import cv2 import numpy as np class_names = ['ا', 'ب', 'ت'] for dirname, _, filenames in os.walk(r'C:\Users\emady\Desktop\VS Code\HandWriten_Arabic\Train2'): for filename in filenames: path2 = os.path.join(dirname, filename) # 读取文件二进制数据并解码 image_data = np.fromfile(path2, dtype=np.uint8) image = cv2.imdecode(image_data, cv2.IMREAD_COLOR) if image is None: print(f"无法读取图片: {path2}") continue image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # 后续处理逻辑
关键说明
np.fromfile(path2, dtype=np.uint8):直接读取文件二进制内容,原生支持UTF-8路径。cv2.imdecode(image_data, cv2.IMREAD_COLOR):将二进制数据解码为彩色图像,参数cv2.IMREAD_COLOR对应imread的默认读取行为。- 添加空值判断:若图片读取失败(如路径错误、文件损坏),会打印提示并跳过后续操作,避免
cvtColor报错。
内容的提问来源于stack exchange,提问作者Emad Uones
相关产品推荐
相关产品推荐

