在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读取图像,还是我错过了什么?
虽然如果支持的话那就太棒了,但似乎并不支持。请注意,操作系统处理打开文件的方式与 URL 不同(显然),因此默认情况下不支持它 - 你不能使用fopen()
URL。如果 OpenCV 明确支持它,那是可能的,但我有一些证据表明他们不支持:
您可以执行以下操作:
system()
,wget
也许通过使用库将文件下载到内存中loadImage()
从 URL 加载。 归档时间: |
|
查看次数: |
4914 次 |
最近记录: |