第一次写这样类型的文章,不合规矩之处敬请大家多多包涵,闲话少说,直入正题
[OpenCV]
曾经用 Matlab 做过简单的图像识别处理,后来发现 OpenCV 更为成熟和易用,因此转投 OpenCV.最近准备学校的科技创新大赛,打算做关于图像识别的东西,刚好又要学 OpenCV,因此从这里入门
[OpenWRT]
OpenWRT 是广泛使用的开源路由器操作系统,因为开源所以强大.
手头有一台 MW151 路由,据悉该路由与 TP-Link 703n 的区别只是 USB 口,改装升级内存和 flash,刷上 703n 的 OpenWRT 固件,一台适宜开发的设备诞生了.
[步骤:路由]
路由器上的原材料:
703n 固件
mjpeg-streamer 软件
免驱摄像头(笔者使用的是某宝上淘来的东芝笔记本拆机摄像头)
首先要实现图像传输需要在路由上挂载 USB 摄像头
1. 安装 mjpeg-streamer 讲软件解压,把其中的 www 目录放到路由器的 www 目录下,改名为 camwww,向路由器上传文件可以用 WinSCP,重启路由
2. 插好摄像头开机,启动 mjpeg-streamer,ssh 登陆路由(可以用 Putty 软件 ssh 登录)输入以下命令
mjpg_streamer - i "input_uvc.so -d /dev/video0" - o "output_http.so -p 8080 -w /www/camwww"
8080 指视频流使用端口,可以自定义,其余选项为默认分辨率 640x480,30fps
用户可以根据自己的需求自定义,例如
mjpg_streamer - i "input_uvc.so -f 15 -r 320*240 -d /dev/video0" - o "output_http.so -p 8080 -w /www/camwww"
表示分辨率 320x240,15fps
这时候可以看到摄像头的 LED 被点亮,结束操作时按 Ctrl+C 键可退出 mjpg-streamer
此时用浏览器(建议用火狐)连接路由器打开以下地址,可以查看摄像头的实时图像
http: //192.168.10.1:8080/?action=stream
192.168.10.1 是路由器地址,8080 是刚才设置的 stream 端口
至此,OpenWRT 已经实现挂载摄像头进行无线监控.
[步骤:OpenCV]
电脑是已经安装好 Visual Studio 2013 并配置好 OpenCV 2.4.10
要用 OpenCV 对路由器传输的实时图像进行处理,只需要让程序从网页获取图像,在 while 循环里不断把采集的图像转换成 Mat 矩阵(新版本的 OpenCV 正在逐步淘汰 IplImage 结构体)既可,令人欣喜的是,OpenCV 里的 VideoCapture 类本身就能从网页获取图像,因此带来了极大的方便,具体如下:
#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include < iostream > #include < stdio.h >
//头文件
using namespace std;
using namespace cv;
/** @function main */
int main(int argc, char * *argv) {
Mat src;
cv: :VideoCapture vcap;
const string address = "http://192.168.10.1:8080/?action=stream?dummy=param.mjpg";
if (!vcap.open(address)) {
cout << "Error opening video stream" << endl;
return - 1;
}
cout << "Stream opened" << endl;
while (1) {
vcap >> src;
// your code here
/// Show your results
namedWindow("Cam", CV_WINDOW_AUTOSIZE);
imshow("Cam", src);
if (waitKey(2) == 27) break;
// Press "Esc" to exit
}
return 0;
}
上文中如果 address 直接等于浏览器地址栏中输入的地址,将不能获取图像,一个解释是,需要让程序知道视频流是 jpeg 类型,因此 "伪造" 了一个 jpeg 文件名
下图是修改 OpenCV 官网的一个 demo,亲测在路由上获取图像可行(分别从笔记本摄像头和路由器挂载的无线摄像头)
来源: