OpenCV 捕获视频 Ubuntu 12.0.4
Posted
技术标签:
【中文标题】OpenCV 捕获视频 Ubuntu 12.0.4【英文标题】:OpenCV capturing video Ubuntu 12.0.4 【发布时间】:2014-05-15 09:39:24 【问题描述】:我需要一些帮助来解决一个奇怪的问题。
我在 Ubuntu 12.0.4 中做了一个用于捕获视频的简单应用程序,我正在使用带有 C++ 的 eclipse 和 OpenCV 库。所以问题是我正在使用一种 IPcameras 并且一切都很完美,这是我正在工作的代码:
int main(int argc, char *argv[])
cv::VideoCapture cap("http//:192.168.1.11:80/videostream.cgi?resolution=320x240&rate=0&user=admin&pwd=admin&.mjpg");
cv::Mat frame;
cv::namedWindow("video");
cvMoveWindow("video", 0, 0);
while ( cap.isOpened() )
cap >> frame;
if(frame.empty()) break;
cv::imshow("video", frame);
if(cv::waitKey(30) >= 0) break;
return 0;
效果很好。我的问题是现在我必须使用其他 IPcameras,我不知道为什么它不起作用,我使用相同的代码(更改 Ip)并且应用程序没有任何想法。问题是我可以通过浏览器看到摄像头,所以摄像头正在工作,然后我认为应该是捕获结构的代码问题,但我尝试了很多组合但没有任何结果,我查看了 IPcamera 文档,没有任何内容。
【问题讨论】:
可能是相机正忙,或者在其他应用程序中打开。我不知道 IP 摄像头,但是对于网络摄像头,openCV 需要设备的独占锁定。 现在我看到浏览器上的相机正在改变分辨率,所以我点击:分辨率=32 而不是分辨率=320x240 它正在浏览器上运行,所以问题看起来像分辨率问题我猜测摄像头不忙,但我仍然无法从我的应用程序中看到摄像头,看起来由于某种原因应用程序无法捕获视频。 【参考方案1】:我找到了解决方案,最后问题是我使用的 IP 摄像机使用“rtsp”协议,但我试图使用 http。
我不得不使用“rtsp”
感谢大家的帮助。
【讨论】:
【参考方案2】:您的 IP 地址格式不正确(使用http://
而不是http//:
)
int main(int argc, char *argv[])
cv::VideoCapture cap("http://192.168.1.11:80/videostream.cgi?resolution=320x240&rate=0&user=admin&pwd=admin&.mjpg");
cv::Mat frame;
cv::namedWindow("video");
...
:
必须紧跟协议名称 (http)
【讨论】:
嗨 Marcassin 很抱歉这是一个复制和粘贴错误,我的格式正确为 http:// sorry 对不起,你的问题没有解决 :-)【参考方案3】:尝试以下代码捕获....
if(cap.isOpened())
while ( cap.grab() )
cap.retrieve(frame);
cv::imshow("video", frame);
if(cv::waitKey(30) >= 0) break;
【讨论】:
您好,谢谢您的回答我尝试了您的代码,但还是一样,我认为问题出在捕获中,因为如果我写 cout cv::VideoCapture 上限; const std::string videoStreamAddress = "192.168.1.47/…"; if(!cap.open(videoStreamAddress)) std::cout 即使它没有显示任何内容,也没有关于“错误打开视频......”所以它甚至无法打开视频。我没有什么我能做的了以上是关于OpenCV 捕获视频 Ubuntu 12.0.4的主要内容,如果未能解决你的问题,请参考以下文章