I need to load an image as a numpy array, manipulate it and display the results. But it doesn’t work.
Displaying static image like below works
st.image('./data/gallery/AI_generated_meal.jpg')
However, when I try to have an image in a variable, and then display it, it raises an error ‘OSError: encoder error -2 when writing image file’.
I tried reading with PIL, skimage, cv2, matplotlib…
Streamlit version 1.2.0
Tried both already existed file and st.file_uploader()
Tried launching with sudo as well.
Some samples of non-working code:
img = cv2.imread('./data/gallery/AI_generated_meal.jpg')
st.image(img)
img = np.array(Image.open('./data/gallery/AI_generated_meal.jpg')).astype(np.float64)
st.image(img)
img = np.array(plt.imread('./data/gallery/AI_generated_meal.jpg'))
st.image(img)
Full Traceback:
OSError: encoder error -2 when writing image file
Traceback:
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/streamlit/script_runner.py", line 354, in _run_script
exec(code, module.__dict__)
File "/home/sergey/Projects/streamlit-image-editor/main.py", line 32, in <module>
st.image(img)
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/streamlit/elements/image.py", line 128, in image
output_format,
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/streamlit/elements/image.py", line 371, in marshall_images
image, width, clamp, channels, output_format, image_id
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/streamlit/elements/image.py", line 272, in image_to_url
data = _np_array_to_bytes(data, output_format=output_format)
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/streamlit/elements/image.py", line 181, in _np_array_to_bytes
return _PIL_to_bytes(img, format)
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/streamlit/elements/image.py", line 167, in _PIL_to_bytes
image.save(tmp, format=format, quality=quality)
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/PIL/Image.py", line 2240, in save
save_handler(self, fp, filename)
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/PIL/JpegImagePlugin.py", line 782, in _save
ImageFile._save(im, fp, [("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize)
File "/home/sergey/Projects/streamlit-image-editor/venv/lib/python3.7/site-packages/PIL/ImageFile.py", line 523, in _save
raise OSError(f"encoder error {s} when writing image file") from exc
I also noticed that using
st.write(img)
I get
[[[0 0 0]
[0 0 0]
[0 0 0]
...
[0 0 0]
[0 0 0]
[0 0 0]]
[[0 0 0]
[0 0 0]
[0 0 0]
...
While the same code in jupyter notebook works properly
[[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[218, 222, 223],
[218, 222, 223],
[218, 222, 223]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[218, 222, 223],
[218, 222, 223],
[218, 222, 223]],
[[255, 255, 255],
[255, 255, 255],
[255, 255, 255],
...,
[218, 222, 223],
[218, 222, 223],
[218, 222, 223]],
...,