当文件路径具有特殊字符时(例如“é”),我无法保存图像。
这是来自Python 3 shell的测试:
>>> cv2.imwrite('gel/test.jpg', frame)
True
>>> cv2.imwrite('gel/ééé/test.jpg', frame)
False
>>> cv2.imwrite('gel/eee/test.jpg', frame)
True
任何想法怎么做?
谢谢!
编辑:
不幸的是,@ PM2Ring和@DamianLattenero提出的所有建议似乎都不起作用:(
所以,我使用@ cdarke的解决方案,这是我的最终代码:
destination = 'gel/ééé/'
gel = 'test.jpg'
script_path = os.getcwd()
os.chdir(destination)
cv2.imwrite(gel, frame)
os.chdir(script_path)
答案 0 :(得分:2)
尝试编码:
cv2.imwrite('gel/ééé/test.jpg'.encode('utf-8'), frame) # or just .encode(), 'utf-8' is the default
如果您正在使用Windows,可能使用:
cv2.imwrite("gel/ééé/test.jpg".encode("windows-1252"), frame)
或者现在根据你的utf-16窗口阅读@PM用户答案:
cv2.imwrite("gel/ééé/test.jpg".encode('UTF-16LE'), frame)
如果不适合你,请尝试:
ascii_printable = set(chr(i) for i in range(0x20, 0x7f))
def convert(ch):
if ch in ascii_printable:
return ch
ix = ord(ch)
if ix < 0x100:
return '\\x%02x' % ix
elif ix < 0x10000:
return '\\u%04x' % ix
return '\\U%08x' % ix
path = 'gel/ééé/test.jpg'
converted_path = ''.join(convert(ch) for ch in 'gel/ééé/test.jpg')
cv2.imwrite(converted_path, frame)
答案 1 :(得分:1)
您可以先使用OpenCV对图像进行编码,然后使用numpy tofile()
方法将其保存,因为编码的图像是一维numpy ndarray:
is_success, im_buf_arr = cv2.imencode(".jpg", frame)
im_buf_arr.tofile('gel/ééé/test.jpg')
答案 2 :(得分:0)
编码问题。...困难但并非不可能
如果您有此字符串= 'テスト/abc.jpg'
您可以将像这样的字符编码为Windows ->
print('テスト/abc.jpg'.encode('utf-8').decode('unicode-escape'))
您会得到类似== 'ãã¹ã/abc.jpg'
然后,如果您想读取文件并使文件名可读且可用,则可以使用某些库来读取路径的文件名,然后更改编码->
#fname is like 'ãã¹ã/abc.jpg'
fname.encode('iso-8859-1').decode('utf-8'))
#您的初始字符串的结果= 'テスト/abc.jpg'
答案 3 :(得分:0)
一行。
cv2.imencode(".jpg",frame)[1].tofile("gel/ééé/test.jpg")