如何使用opencv(python)从url读取gif

时间:2018-01-09 07:50:03

标签: python opencv

我可以使用cv2作为

读取jpg文件
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)

但是,当我使用gif文件时,它会返回错误:

error: (-215) size.width>0 && size.height>0 in function cv::imshow

如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

步骤:

  1. 使用urllib从网络上阅读gif,
  2. 使用imageio.mimread将gif加载到nump.ndarray(s)。
  3. numpyOpenCV更改频道订单。
  4. 使用OpenCV
  5. 进行其他图像处理

    代码示例:

    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()
    

    请注意。 我在另一个答案中使用了gif。 Video Stabilization with OpenCV

    结果:

    >>> Total 76 frames!
    

    显示的一个gif-frames:

    enter image description here