首先我们需要了解一下imread
函数在读取图片时的路径解析规则。在Windows平台上,OpenCV默认使用GBK编码解析文件路径,而不是UTF-8。这就导致了中文路径在使用imread
函数读取时可能会出现问题。
解决方法有两种:
1. 使用raw string
将中文路径使用raw string(在字符串前加上r
)的方式来解决。
import cv2
img_path = r"C:\Users\用户名\Desktop\图片.jpg"
img = cv2.imread(img_path)
这种方法比较简单,但也有一些缺点。如果路径中含有英文字符,那么这些英文字符可能会被误认为是转义字符,导致路径错误。
2. 使用Unicode编码
使用Unicode编码来解决中文路径的问题。首先需要将中文路径转换为Unicode编码的字符串,再将其传给imread
函数。
import cv2
img_path = u"C:/Users/用户名/Desktop/图片.jpg"
img_path = img_path.encode('gbk')
img = cv2.imread(img_path.decode())
这种方法比较繁琐,但比较稳定。
下面给出两个示例:
示例1:
如果图片路径是 C:\Users\我的名字\Pictures\图片.jpg
,那么我们可以用如下代码来读取图片:
import cv2
img_path = r"C:\Users\我的名字\Pictures\图片.jpg"
img = cv2.imread(img_path)
示例2:
如果图片路径是 C:\Users\MyName\Pictures\照片.jpg
,那么我们可以用如下代码来读取图片:
import cv2
img_path = u"C:/Users/MyName/Pictures/照片.jpg"
img_path = img_path.encode('gbk')
img = cv2.imread(img_path.decode())
这两个示例分别使用了raw string和Unicode编码两种方法来读取中文路径下的图片。需要注意的是,在使用Unicode编码的时候,路径中的斜杠需要使用正斜杠/
而不是反斜杠\
,这是因为Unicode编码默认使用正斜杠作为路径分隔符。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python OpenCV的imread不能读取中文路径问题及解决 - Python技术站