在windows下调用手机摄像头,并传给opencv
来源:互联网 发布:网店数据分析报告 编辑:程序博客网 时间:2024/06/10 11:35
(还有一种超级简单的方法
http://blog.csdn.net/qq_31669419/article/details/53312128
写完这篇才发现,������)
直接上代码:(代码参考自:
http://blog.leanote.com/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 typecv::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
- linux opencv调用手机摄像头
- Qt在Windows上简单调用opencv摄像头Demo
- 在页面中嵌入Applet使用opencv调用摄像头,并显示实时摄像头内容
- OpenCV调用摄像头录像并保存下来
- OpenCV调用摄像头录像并保存下来
- OpenCV调用摄像头录像并保存下来
- OpenCV调用摄像头录像并保存下来
- opencv调用摄像头并存储视频
- 使用Opencv调用摄像头并在MFC中进行视频显示
- OpenCV编程->Windows7下调用iPhnoe摄像头
- 【树莓派】在OpenCV中调用CSI摄像头
- 在Windows下摄像头开发
- opencv从摄像头中读取视频,并保存在本目录下
- 在Ubuntu下使用opencv调用海康威视的网络摄像头
- 在Ubuntu下使用opencv调用海康威视的网络摄像头
- opencv读取手机摄像头
- 在ubuntu下利用opencv打开摄像头
- 南阳oj 248 BUYING FEED
- 服务器维护系列——Matlab代码从Windows拷贝到Linux变成乱码
- ssh 远程执行命令 方便集群的管理
- 求一个数的素数因子
- js使用心得——避免全局变量冲突的小技巧
- 在windows下调用手机摄像头,并传给opencv
- 在Python里安装Jieba中文分词组件
- 第16章 Channel 和Unsafe
- Java集合类
- mysql事务隔离级别
- HTML取消点击事件等一些开发技巧
- 动态数组的实现
- 自定义View的简单案例(4)实现小风车旋转的效果
- C++中二维Vector初始化的一种方式