Search code examples
pythonopencvheic

OpenCv imdecode returns none for HEIC file


I am working on application to resize the images. It is working fine with image format of jpg, png, jpeg, but its not working as expected to heic files.

Error: OpenCV(4.4.0) /tmp/pip-req-build-vu_aq9yd/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'

Code snipplet

        npimg = np.frombuffer(stream.read(), np.uint8)
        img = cv2.cvtColor(cv2.imdecode(npimg, cv2.IMREAD_COLOR), cv2.COLOR_BGR2RGB)
        h, w = cls.get_dims(img, dpi)
        img = cv2.resize(img, (w, h), interpolation=cv2.INTER_AREA)
        return Image.fromarray(img).convert("RGB")

What I found is:

cv2.imdecode(npimg, cv2.IMREAD_COLOR) returns none.

I am not able to figure out why its not working with heic file. What can be the solution for this issue?

Note:

I had looked through the previous similar issue, but none of them worked for me.


Solution

  • OpenCV do not support heic files. From OpenCV documentation:

    Currently, the following file formats are supported:
    
        Windows bitmaps - *.bmp, *.dib (always supported)
        JPEG files - *.jpeg, *.jpg, *.jpe (see the Note section)
        JPEG 2000 files - *.jp2 (see the Note section)
        Portable Network Graphics - *.png (see the Note section)
        WebP - *.webp (see the Note section)
        Portable image format - *.pbm, *.pgm, *.ppm *.pxm, *.pnm (always supported)
        PFM files - *.pfm (see the Note section)
        Sun rasters - *.sr, *.ras (always supported)
        TIFF files - *.tiff, *.tif (see the Note section)
        OpenEXR Image files - *.exr (see the Note section)
        Radiance HDR - *.hdr, *.pic (always supported)
        Raster and Vector geospatial data supported by GDAL (see the Note section)
    

    https://docs.opencv.org/4.5.4/d4/da8/group__imgcodecs.html