pythonopencvunicodepath

How do I read an image from a path with Unicode characters?


I have the following code and it fails, because it cannot read the file from disk. The image is always None.

# -*- coding: utf-8 -*-
import cv2
import numpy

bgrImage = cv2.imread(u'D:\\ö\\handschuh.jpg')

Note: my file is already saved as UTF-8 with BOM. I verified with Notepad++.

In Process Monitor, I see that Python is acccessing the file from a wrong path:

Process Monitor

I have read about:


Solution

  • It can be done by

    # -*- 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)
    

    or (as mentioned in the comments, thanks to jdhao):

    # -*- coding: utf-8 -*-
    import cv2
    import numpy
    
    bgrImage = cv2.imdecode(np.fromfile(u'D:\\ö\\handschuh.jpg', np.uint8), cv2.IMREAD_UNCHANGED)