2013-08-20 440 views
0

我有上安裝的MacX(獅子)與opencv ffmpeg的支持如何通過OpenCV和python打開IP Camera Url?

import cv2 
import cv 
import base64 
import time 
import urllib2 
import numpy as np 

from cv2 import __version__ 

print(__version__) 
video="http://xxx.223.91.91/mjpg/1/video.mjpg?dummy=param.avi" 
vv = cv.CaptureFromFile(video) 
cv2.namedWindow("preview") 
vc = cv2.VideoCapture("http://xxx.223.91.91/mjpg/1/video.mjpg?dummy=param.mjpg") 

但顯示警告

2.4.2

警告:無法讀取電影文件http://xxx.223.91.91/mjpg/1/video.mjpg?dummy=param.avi

警告:無法讀取電影文件http://xxx.223.91.91/mjpg/1/video.mjpg?dummy=param.mjpg

我Google很多代碼,但c找不到解決問題的辦法。 請幫助我,謝謝。

回答

4
import cv2 
import urllib 
import numpy as np 

stream=urllib.urlopen('http://localhost:8080/frame.mjpg') 
bytes='' 
while True: 
    bytes+=stream.read(16384) 
    a = bytes.find('\xff\xd8') 
    b = bytes.find('\xff\xd9') 
    if a!=-1 and b!=-1: 
     jpg = bytes[a:b+2] 
     bytes= bytes[b+2:] 
     i = cv2.imdecode(np.fromstring(jpg, dtype=np.uint8),cv2.CV_LOAD_IMAGE_COLOR) 
     cv2.imshow('i',i) 
     if cv2.waitKey(1) ==27: 
      exit(0)  
+0

你是說OpenCV無法直接打開MJPG流嗎? 但我在Google上搜索的代碼表明,代碼是用OpenCV直接打開MJPG流,但是我的實驗不起作用。 – Sky

+0

這是我的經驗,一個正確配置的OpenCV _can_直接打開一個MJPG流。然而,似乎有一些配置魔法,我不完全理解。 –

+1

是的,opencv可以在下列條件下打開一個mjpg流。 1)它是用ffmpeg編譯的。 2)url字符串必須以'mjpg'結尾3)當opencv調用ffmpeg時,由於max_analyze_duration未設置,流不會立即啓動。當然,通過強制執行'-f mjpeg'並設置一個較低的'max_analyze_duration'來編輯opencv代碼很困難。但是這種方法避免了脂肪依賴並且允許更好地控制流。我有一個解釋和使用示例@ http://stackoverflow.com/questions/21702477/how-to-parse-mjpeg-http-stream-from-ip-camera –