代码之家  ›  专栏  ›  技术社区  ›  abagshaw

OpenCV从url加载视频

  •  14
  • abagshaw  · 技术社区  · 6 年前

    我有一个视频文件(即。 https://www.example.com/myvideo.mp4 )需要用OpenCV加载它。

    对图像执行等效操作相当简单:

    imgReq = requests.get("https://www.example.com/myimage.jpg")
    imageBytes = np.asarray(bytearray(data), dtype=np.uint8)
    loadedImage = cv2.imdecode(image, cv2.IMREAD_COLOR)
    

    我想做以下类似的事情(其中 loadedVideo 将类似于OpenCV从 cv2.VideoCapture ):

    videoReq = requests.get("https://www.example.com/myimage.mp4")
    videoBytes = np.asarray(bytearray(data), dtype=np.uint8)
    loadedVideo = cv2.videodecode(image, cv2.IMREAD_COLOR)
    

    但是 cv2.videodecode 不存在。有什么想法吗?


    编辑: 鉴于这可能是一个只有OpenCV的死胡同,我对在加载到OpenCV之前结合其他图像库的解决方案持开放态度。。。如果存在这样的解决方案。

    2 回复  |  直到 6 年前
        1
  •  20
  •   thewaywewere    6 年前

    看来 cv2.videocode 不是有效的 OpenCV API 要么在 OpenCV 2.x OpenCV 3.x

    下面是它工作的示例代码 OpenCV 3 其中使用 cv2.VideoCapture

    import numpy as np
    import cv2
    
    # Open a sample video available in sample-videos
    vcap = cv2.VideoCapture('https://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_2mb.mp4')
    #if not vcap.isOpened():
    #    print "File Cannot be Opened"
    
    while(True):
        # Capture frame-by-frame
        ret, frame = vcap.read()
        #print cap.isOpened(), ret
        if frame is not None:
            # Display the resulting frame
            cv2.imshow('frame',frame)
            # Press q to close the video windows before it ends if you want
            if cv2.waitKey(22) & 0xFF == ord('q'):
                break
        else:
            print "Frame is None"
            break
    
    # When everything done, release the capture
    vcap.release()
    cv2.destroyAllWindows()
    print "Video stop"
    

    你可以检查一下 Getting Started with Videos 有关详细信息,请参阅教程。

    希望这有帮助。

        2
  •  2
  •   kishea    6 年前

    您必须使用视频捕获读取视频。目前没有其他方法可以解决这个问题。除非你自己定义。

    请记住,视频是以定义的帧速率变化的图像的组合。

    因此,您可以在while循环中读取每个帧。应用imdecode功能时。

    import numpy as np
    import cv2
    
    cap = cv2.VideoCapture('https://www.example.com/myimage.mp4')
    
    while(cap.isOpened()):
        ret, image = cap.read()    
        loadedImage = cv2.imdecode(image, cv2.IMREAD_COLOR)
        cv2.imshow('frame',loadedImage)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cap.release()
    cv2.destroyAllWindows()