如何在 Visual C++ 2010 或 2008 中使用 OpenCV 2.1 访问 ip camera (compro IP50W)

Posted

技术标签:

【中文标题】如何在 Visual C++ 2010 或 2008 中使用 OpenCV 2.1 访问 ip camera (compro IP50W)【英文标题】:how to access ip camera (compro IP50W) using OpenCV 2.1 in visual C++ 2010 or 2008 【发布时间】:2011-06-20 14:48:29 【问题描述】:
CvCapture* cam = cvCaptureFromFile("http:\\192.168.0.77");
IplImage* img;
img = cvQueryFrame(cam);

IplImage* current = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1);
IplImage* comResult = cvCreateImage(cvGetSize(img),IPL_DEPTH_8U,1); 

double cam_w = cvGetCaptureProperty(cam, CV_CAP_PROP_FRAME_WIDTH);
double cam_h = cvGetCaptureProperty(cam, CV_CAP_PROP_FRAME_HEIGHT);
double fps = 10; 

【问题讨论】:

相机的文档是否说明视频源是从哪个 URL 流式传输的? 【参考方案1】:

阅读documentation:

CvCapture* cvCaptureFromFile(const char* filename);

初始化从文件中捕获视频。函数 cvCaptureFromFile() 分配并初始化 CvCapture 结构,用于从指定文件中读取视频流。支持哪些编解码器和文件格式取决于后端库。

这个函数从一个文件中读取!您需要将相机连接到计算机才能从相机中检索帧。

然而,如果你编译的 OpenCV 支持 ffmpeg,你可以从网络中的文件中读取,但你必须指定 文件名在网址中。

注意在下面的代码中,文件名是在末尾指定的:

CvCapture* camera = cvCaptureFromFile("http://username:pass@cam_address/axis-cgi/mjpg/video.cgi?resolution=640x480&req_fps=30&.mjpg");
if (!camera)

    printf("cvCaptureFromFile failed\n");
    exit(1);

始终测试 OpenCV 函数的返回。不检查怎么知道函数是否成功,对吧?!

【讨论】:

我也有同样的问题,使用rtsp没有解决! 我也有同样的问题。当我阅读手册时,它说 rtsp 的地址是 rtsp://192.168.1.128:554/ch1-s1。这种流式处理适用于 vlc,但不适用于 opencb,因为链接末尾没有指定文件。有什么建议吗?【参考方案2】:

我发现这个site 有助于解决这个问题

它旨在通过一种简单的方法来解决有关在 opencv C++ (windows) 中处理 FFMPEG 解码的问题,现在我可以使用 highgui 从 IP 摄像机中检索图像

【讨论】:

请不要提供“仅链接”的答案,因为对链接网站的更改会使答案毫无意义

以上是关于如何在 Visual C++ 2010 或 2008 中使用 OpenCV 2.1 访问 ip camera (compro IP50W)的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Visual Studio C++ 2010 编译行为像 gcc/g++? (或相反亦然)

Visual Studio C++ 编译器标志:-Zm200 是啥?

在 Visual Studio C++ 2010 中找不到或打开 PDB 文件

在 Visual Studio C++ 2010 中找不到或打开 PDB 文件

如何在 Visual C++ 2010 中使用 C++ 库 [重复]

在 Visual C++ 2005 中开发的 Visual C++ 项目 - 在 Visual C++ 2010 中,打开菜单时调试断言失败,但发布模式有效,如何解决?