我已经阅读了许多关于在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");
但是它返回了 NULL 并输出。
[image2 @ 0xd701e0]Could not find codec parameters (Video: mjpeg, yuv420p)
我也尝试将http替换为rtsp,但仍然不起作用。我还尝试将url替换为其他一些图像url(一个直接链接到Google Images的随机图像,以及本地主机上的一个图像),但它总是崩溃并出现段错误。
这是我的完整源代码。
#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;
}
OpenCV真的可以通过网络读取图像吗?还是我错过了什么?
rtsp://192.168.1.104:8080/videofeed
但是也失败了。 - krzych