Search code examples
pythonimageopencvopencv3.0

OpenCV - specify format while writing image to file (cv2.imwrite)


I want to save an image using opencv's imwrite without any extension. I know image format in cv2.imwrite is chosen based on the filename extension. Is there a way to specify the compression format while calling the function, or would I have to rename the file once created?

cv2.imwrite(filename, img)
[Out]: /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgcodecs/src/loadsave.cpp:459: error: (-2) could not find a writer for the specified extension in function imwrite_

Solution

  • I don't understand your motivation for doing this, but if you want to write a JPEG to disk without the .JPG extension, or a PNG file without the .PNG extension, you could simply do the encoding to a memory buffer and then write that to disk.

    So, if I load an image like this:

    import cv2
    
    # Load image
    im = cv2.imread('image.jpg')
    

    I should now be in the same position as you, with an image in my variable im.

    I can now encode the image to a memory buffer, and write that memory buffer to disk without extension:

    success, buffer = cv2.imencode(".jpg",im)
    buffer.tofile('ExtensionlessFile')