admin管理员组文章数量:1122947
(还有一种超级简单的方法
http://blog.csdn/qq_31669419/article/details/53312128
写完这篇才发现,������)
直接上代码:(代码参考自:
http://blog.leanote/post/5387106a702afd5911000000)
整篇教程是针对windows的,linux类似,我相信会用linux的,对照本篇教程也能完成配置。
#include <stdio.h>
#include "curl/curl.h"
#include <sstream>
#include <iostream>
#include <vector>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
size_t write_data(char *ptr, size_t size, size_t nmemb, void *userdata)
{
ostringstream *stream = (ostringstream*)userdata;
size_t count = size * nmemb;
stream->write(ptr, count);
return count;
}
//function to retrieve the image as Cv::Mat data type
cv::Mat curlImg()
{
CURL *curl;
CURLcode res;
ostringstream stream;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.100:8080/shot.jpg"); //the JPEG Frame url
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); // pass the writefunction
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &stream); // pass the stream ptr when the writefunction is called
res = curl_easy_perform(curl); // start curl
string output = stream.str(); // convert the stream into a string
curl_easy_cleanup(curl); //cleanup
vector<char> data = vector<char>(output.begin(), output.end()); //convert string into a vector
Mat data_mat = Mat(data); // create the cv::Mat datatype from the vector
Mat image = imdecode(data_mat, 1); //read an image from memory buffer
return image;
}
int main(void)
{
double scale = 1;
while (1)
{
Mat image = curlImg(); // get the image frame
//可以不resize,不过电脑端会图像显示很大
Size dsize = cv::Size(image.cols*scale, image.rows*scale);
Mat image2 = cv::Mat(dsize, CV_32S);
resize(image, image2, dsize);
imshow("Image output", image2);
char c = cvWaitKey(1);
if (c == 27) break;
}
cv::destroyWindow("Image output");
}
如果之前能顺利使用opencv的话,这里仅存在找不到头文件curl/curl.h这一个错误。
先下载curl的源码:http://curl.mirror.anstey.ca/curl-7.51.0.zip
1.将include目录下的curl文件夹复制到VS的工程目录下(与你的cpp同目录)
2.编译curl
我相信使用opencv的人不会没有cmake(没有还不快去下,最新版就行,linux下更不用说),打开cmake的gui
2.1在下载的curl目录下新建一个build目录,如下图,填入curl的源码路径和编译路径:
我的curl源码是放在c盘根目录下的,根据自己放的实际路径填写即可
2.2 点击Configure,弹出的对话框选默认的编译器就行,完成后弹出error,没关系,先取消勾选BUILD中的BUILD_TESTING选项
2.2 再次Configure,这时红色应该消失了,如上图所示,点击Generate
下面输出中有几行红色无所谓,不是error就行
2.3 打开bulid文件夹下的CURL.sln,根据你的程序,注意选择Release或者Debug(默认为Debug,但我习惯于Release,这里已Release为例),右键ALL_BUILD——生成
按道理应该再右键INSTALL——生成,但我这里会出错,没解决,这不关键
3.在2.1步新建的bulid文件夹下,找到lib文件夹
根据你选择的release或者debug,这里会生成相应的库文件
3.1将release或者debug里面的文件全部复制到自己VS的工程目录下,比如我的事这样的:
3.2添加lib库文件,如果你配置过opencv,这应该相当熟悉
在工程的“属性——配置属性——链接器——输入——附加依赖项”中添加libcurl_imp.lib:
编译运行看是否通过。
4.手机端的准备
此时运行上述程序还是会因为获取不到图像而出错的。
以安卓手机为例(苹果应该类似,没有手机无法实验),下载安装软件——IP摄像头,应该是不难找的,找不到我再传吧。
打开软件,开启服务器:
这里会有一个地址:192.168.1.100:8080,把它输入到浏览器中应该是能访问的,这一步没问题的话,上述代码中有一行:
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.1.100:8080/shot.jpg");
将其中的地址替换为你自己的地址,然后就可以编译运行啦!试试吧
版权声明:本文标题:在windows下调用手机摄像头,并传给opencv 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1726713005a1153283.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论