c,opencv - 通过ip访问相机JPG图像

Saw*_*awi 6 c opencv

OpenCV 2.3.1中,我已经阅读了许多关于通过IP流式传输图像的线程,但我仍然无法使我的程序工作.

我从https://market.android.com/details?id=com.pas.webcam&hl=en下载了适用于Android的IP网络摄像头,最近学习了OpenCV以从我的Android手机摄像头中检索图像.

它的内置手册说,手机摄像头的图像可以位于http://the.phone.ip.address:8080/shot.jpg.我已经多次从浏览器打开它,它看起来总是很好.我还用FFmpeg手动构建了OpenCV支持.

到目前为止我已经尝试过了

CvCapture* webcam = cvCaptureFromFile("http://192.168.1.220:8080/shot.jpg");
Run Code Online (Sandbox Code Playgroud)

但它返回NULL并输出

[image2 @ 0xd701e0]Could not find codec parameters (Video: mjpeg, yuv420p)
Run Code Online (Sandbox Code Playgroud)

我也尝试用rtsp替换http,但它仍然不起作用.我还试图用其他图像网址(一个直接链接到谷歌图像的随机图像,一个来自localhost)替换网址,它总是杀死一个段错误.

这是我的完整资料来源

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <cv.h>
#include <highgui.h>

int main(int argc, char* argv[])
{ 
  CvCapture* webcam = cvCaptureFromFile("http://192.168.1.220:8080/shot.jpg");
  if(!webcam)
    {
      fprintf(stderr, "cannot open webcam\n");
      return 1;
    }

  IplImage* img = cvQueryFrame(webcam);
  if(!img)
    {
      fprintf(stderr, "cannot get image\n");
      return 1;
    }

  cvNamedWindow("test", CV_WINDOW_AUTOSIZE);
  cvShowImage("test", img);
  cvWaitKey(0);
  cvReleaseImage(&img);
  /**/ cvReleaseCapture(&webcam); /**/
  cvDestroyWindow("test");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

OpenCV真的可以通过IP读取图像,还是我错过了什么?

Dan*_*Dan 2

虽然如果支持的话那就太棒了,但似乎并不支持。请注意,操作系统处理打开文件的方式与 URL 不同(显然),因此默认情况下不支持它 - 你不能使用fopen()URL。如果 OpenCV 明确支持它,那是可能的,但我有一些证据表明他们不支持:

您可以执行以下操作:

  • 以其他方式下载图像 - 也许通过调用system()wget也许通过使用库将文件下载到内存中
  • 至少有消息来源称您可以使用处理loadImage()从 URL 加载。