问题
I am trying to access a video from an IP camera. I am using OpenCV and Python to do so. The code that I have tried is given below:
import numpy as np
import cv2
from cv2 import cv
camera=cv.CaptureFromFile("http://root:root@192.168.0.90/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=30&.mjpg")
if camera is None:
print 'Camera is null'
else:
print 'Camera is not null'
cv.NamedWindow("win")
while True:
image=cv.QueryFrame(camera)
cv.ShowImage("win", image)
k=int(cv.WaitKey(10))
if k is 27:
break
On running this code the output that I am getting is:
Image not converted
On using another method, CaptureFromCAM
instead of CaptureFromFile
the code is:
import numpy as np
import cv2
from cv2 import cv
camera=cv.CaptureFromCAM(0)
if camera is None:
print 'Camera is null'
else:
print 'Camera is not null'
cv.NamedWindow("win")
while True:
image=cv.QueryFrame(camera)
if image is None:
print 'No conversion to IPL Image'
break
else:
cv.ShowImage("win", image)
When I run this code the error I am getting is:
ERROR: SampleCB() - buffer sizes do not match
No conversion to IPL Image
I read about it, and the SampleCB()
error is in the case when the buffer size does not match the expected input size. I tried to change the streaming resolution, but nothing seems to work. I followed this thread and this thread. They are giving the C++ code and on conversion to Python (the code given above) it does not work. Or the thread gives the code for motion detection. I am using Windows 7 and Eclipse with Pydev for development. What do I do?
回答1:
Oh, please stick with the cv2 API. The old cv one is no more available in current OpenCV versions:
import numpy as np
import cv2
cv2.namedWindow("win")
camera = cv2.VideoCapture("http://username:pass@192.168.0.90/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=30&.mjpg")
while camera.isOpened():
ok, image = camera.read()
if not ok:
print 'no image read'
break
cv2.imshow("win", image)
k = cv2.waitKey(1) & 0xff
if k == 27 : break # Esc pressed
回答2:
Look this example with python and OpenCV, IPCAM hikvision
import numpy as np
import cv2
cap = cv2.VideoCapture()
cap.open("rtsp://USER:PASS@IP:PORT/Streaming/Channels/2")
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
#gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# Display the resulting frame
cv2.imshow('Salida',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()
See in the window: Get video from IPCAM with python and OpenCV
来源:https://stackoverflow.com/questions/21721813/ip-camera-python-error