前言:相信大家玩过opencv的都知道如何轻松地获取USB摄像头的数据,那就是一句简单的VideoCapture就搞定了,但是如何获取WIFI或者网络摄像头呢?考虑到大家遇到的问题都不一样,我先来描述一下我遇到的问题:我在玩Arduino,但是发现Arduino在控制和算法这一块好像不太好用,我更倾向于将Arduino称为出色的硬件控制器。它往往只能搭载很普通的几个传感器(超声波、语音模块、加速度等),但是,我想玩摄像头,我觉得机器人有了视觉可以做更多的事情。
电路连接:现手头有Gl-inet路由器一台(刷机固件需要的我可以提供给大家,网上也有),一个摄像头模块(超便宜的那种),还有Arduino主控板一块,还有电脑(vs2013配置的opencv3.0)。电路连接如下:路由器模块插上USB摄像头,Arduino主控板连接路由器模块,上电。打开电脑,连接wifi信号。打开火狐浏览器,输入视频地址,看能否监测到你的摄像头。
如果可以,那么打开vs2013,输入以下代码,稍等数秒后即可看到你的摄像头画面了。我需要说的是http://192.168.10.1:8080/?action=stream.mjpg这行代码前半部分是你的视频控制端口地址,后面的.mjpg是伪装成图片格式,这样opencv才会读出来。 #include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc, char*argv[])
{
Mat src,grayvideo,blurvideo,cannyvideo;
VideoCapture video;
const string address = "http://192.168.8.1:8083/?action=stream.mjpg";
if (video.open(address));
{
for (;;)
{
video >> src;
cvtColor(src, grayvideo, COLOR_BGR2GRAY);
blur(grayvideo, blurvideo, Size(7, 7));
Canny(blurvideo, cannyvideo, 0, 60, 3);
imshow("cannyvideo", cannyvideo);
imshow("Cam", src);
waitKey(1); //延时30ms
}
}
return 0;
}