【问题标题】:IP camera Python error网络摄像机 Python 错误
【发布时间】:2014-03-10 10:00:54
【问题描述】:

我正在尝试从 IP 摄像机访问视频。我正在使用 OpenCV 和 Python 来做到这一点。我尝试过的代码如下:

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

在运行此代码时,我得到的输出是:

Image not converted

在使用另一种方法时,CaptureFromCAM 而不是CaptureFromFile,代码是:

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)

当我运行这段代码时,我得到的错误是:

ERROR: SampleCB() - buffer sizes do not match
No conversion to IPL Image

我读过它,SampleCB() 错误是在缓冲区大小与预期输入大小不匹配的情况下。我试图更改流分辨率,但似乎没有任何效果。我关注了this 线程和this 线程。他们正在提供 C++ 代码并且在转换为 Python(上面给出的代码)时它不起作用。或者线程给出了运动检测的代码。我正在使用 Windows 7 和 Eclipse 与 Pydev 进行开发。我该怎么办?

【问题讨论】:

  • @AnoopK.Prabhu 相同 SampleCB() 错误
  • @PrakharMohanSrivastava 请找到并发布指向您相机手册的链接。您可能在 URL 中使用了错误的参数?另外,这听起来像一个小细节可能是错误的,所以here is a chat room任何人都可以讨论,所以我们不需要使用 cmets 进行讨论。
  • Prakhar 告诉我相机是 M1103 所以this should be the manual
  • @PrakharMohanSrivastava 我看到了您关于将视频放入 tkinter 的其他问题。这是否意味着这部分现在正在工作?如果是这样,您能否接受 berak 的答案或在解决方案中发布您自己的答案?我知道开始使用 OpenCV 可能会令人沮丧,所以这可能会在未来帮助很多其他人。

标签: python c++ opencv video-streaming ip-camera


【解决方案1】:

哦,请坚持使用 cv2 API。旧的 cv 在当前的 OpenCV 版本中不再可用:

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

【讨论】:

  • 程序没有输出就终止了?你确定你的代码是正确的吗?还是我需要添加一些东西?
  • 它无法打开您的网址
  • 我使用我的网络浏览器进行了检查,它正在打开网址。还有其他问题吗?
  • 是的,url好像有问题。 camera.isOpened 是假的。问题是当我在浏览器上粘贴链接时它运行良好。还有其他想法吗?
  • @amitnair92 很遗憾,没有,我无法解决它,然后转向其他事情。
【解决方案2】:

看这个例子用python和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()

在窗口中查看: Get video from IPCAM with python and OpenCV

【讨论】:

  • 欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些有限的短期帮助。一个正确的解释would greatly improve 其长期价值,通过展示为什么这是解决问题的好方法,并将使其对未来有其他类似问题的读者更有用。请edit您的回答添加一些解释,包括您所做的假设。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-25
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2014-10-28
相关资源
最近更新 更多