[英]How do I read an image from a path with Unicode characters?
我有以下代碼,但它失敗了,因為它無法從磁盤讀取文件。 圖像始終為None
。
# -*- coding: utf-8 -*-
import cv2
import numpy
bgrImage = cv2.imread(u'D:\\ö\\handschuh.jpg')
注意:我的文件已經保存為 UTF-8 和 BOM。 我用記事本++進行了驗證。
在進程監視器中,我看到 Python 正在從錯誤的路徑訪問文件:
我讀過:
open()
function 相關,與 OpenCV 無關。它可以通過
open()
文件,它支持 Unicode,如鏈接的答案中所示,# -*- coding: utf-8 -*-
import cv2
import numpy
stream = open(u'D:\\ö\\handschuh.jpg', "rb")
bytes = bytearray(stream.read())
numpyarray = numpy.asarray(bytes, dtype=numpy.uint8)
bgrImage = cv2.imdecode(numpyarray, cv2.IMREAD_UNCHANGED)
受 Thomas Weller 的回答啟發,您還可以使用np.fromfile()
讀取圖像並將其轉換為 ndarray,然后使用cv2.imdecode()
將數組解碼為三維 numpy ndarray(假設這是一個彩色圖像沒有 alpha 通道):
import numpy as np
# img is in BGR format if the underlying image is a color image
img = cv2.imdecode(np.fromfile('測試目錄/test.jpg', dtype=np.uint8), cv2.IMREAD_UNCHANGED)
np.fromfile()
將磁盤上的圖像轉換為 numpy 一維 ndarray 表示。 cv2.imdecode
可以解碼這種格式並轉換為正常的 3 維圖像表示。 cv2.IMREAD_UNCHANGED
是解碼的標志。 可以在此處找到完整的標志列表。
附注。 有關如何將圖像寫入帶有 unicode 字符的路徑,請參見此處。
我將它們復制到一個臨時目錄。 這對我來說可以。
import os
import shutil
import tempfile
import cv2
def cv_read(path):
"""
:param path: path of a single image or a directory which contains images
:return: a single image or a list of images
"""
with tempfile.TemporaryDirectory() as tmp_dir:
if os.path.isdir(path):
shutil.copytree(path, tmp_dir, dirs_exist_ok=True)
elif os.path.isfile(path):
shutil.copy(path, tmp_dir)
else:
raise FileNotFoundError
img_arr = [
cv2.imread(os.path.join(tmp_dir, img))
for img in os.listdir(tmp_dir)
]
return img_arr if len(img_arr) > 1 else img_arr[0]
我的問題與您相似,但是,我的程序將在image = cv2.imread(filename)
語句處終止。
我解決了這個問題,首先將文件名編碼為 utf-8,然后將其解碼為
image = cv2.imread(filename.encode('utf-8', 'surrogateescape').decode('utf-8', 'surrogateescape'))
bgrImage = cv2.imread(filename.encode('utf-8'))
將文件完整路徑編碼為 utf-8
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.