I can read jpg file using cv2 as
import cv2
import numpy as np
import urllib
url = r'http://www.mywebsite.com/abc.jpg'
req = urllib.request.urlopen(url)
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
img = cv2.imdecode(arr,-1)
cv2.imshow('abc',img)
However, when I do it with gif file, it returns an error:
error: (-215) size.width>0 && size.height>0 in function cv::imshow
How to solve this problem?
Project description. Python library to convert single oder multiple frame gif images to numpy images or to OpenCV without PIL or pillow. OpenCV does not support gif images.
As I mentioned earlier, OpenCV reads the image in BGR format by default.
Steps:
urllib
to read the gif from web, imageio.mimread
to load the gif to nump.ndarray
(s).numpy
or OpenCV
.OpenCV
Code example:
import imageio
import urllib.request
url = "https://i.stack.imgur.com/lui1A.gif"
fname = "tmp.gif"
## Read the gif from the web, save to the disk
imdata = urllib.request.urlopen(url).read()
imbytes = bytearray(imdata)
open(fname,"wb+").write(imdata)
## Read the gif from disk to `RGB`s using `imageio.miread`
gif = imageio.mimread(fname)
nums = len(gif)
print("Total {} frames in the gif!".format(nums))
# convert form RGB to BGR
imgs = [cv2.cvtColor(img, cv2.COLOR_RGB2BGR) for img in gif]
## Display the gif
i = 0
while True:
cv2.imshow("gif", imgs[i])
if cv2.waitKey(100)&0xFF == 27:
break
i = (i+1)%nums
cv2.destroyAllWindows()
Note. I use the gif in my another answer. Video Stabilization with OpenCV
The result:
>>> Total 76 frames!
One of the gif-frames displayed:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With