9381|6

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

OpenCV + OpenWRT 无线摄像头监控和图像处理 [复制链接]

本帖最后由 hosea1008 于 2015-2-9 21:44 编辑

诚然,可以使用OpenCV的linux版本把该功能做到嵌入式设备当中,然而当处理复杂的时候就需要在服务器平台上进行图像处理运算,本文尝试简单实现这一功能



【OpenWRT】
OpenWRT是广泛使用的开源路由器操作系统,因为开源所以强大。

手头有一台MW151路由,据悉该路由与TP-Link 703n的区别只是USB口,改装升级内存和flash,刷上703n的OpenWRT固件,一台适宜开发的设备诞生了。

【步骤:路由】

路由器上的原材料:
703n固件
mjpeg-streamer软件
免驱摄像头(笔者使用的是某宝上淘来的东芝笔记本拆机摄像头)
首先要实现图像传输需要在路由上挂载USB摄像头,本文挂出来的路由固件已经有具有相应组件(kmod-video-core和kmod-video-uvc)。
1.安装mjpeg-streamer讲软件解压,把其中的www目录放到路由器的www目录下,改名为camwww,向路由器上传文件可以用WinSCP,重启路由
2.插好摄像头开机,启动mjpeg-streamer,ssh登陆路由(可以用Putty软件ssh登录)输入以下命令

  1. mjpg_streamer -i "input_uvc.so  -d /dev/video0" -o "output_http.so -p 8080 -w /www/camwww"
复制代码

8080指视频流使用端口,可以自定义,其余选项为默认分辨率640x480,30fps


用户可以根据自己的需求自定义,例如

  1. 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被点亮,结束操作时在SSH窗口中按Ctrl+C键可退出mjpg-streamer


此时用浏览器(建议用火狐)连接路由器打开以下地址,可以查看摄像头的实时图像

  1. http://192.168.10.1:8080/?action=stream
复制代码


至此,OpenWRT已经实现挂载摄像头进行无线监控

【步骤:OpenCV】
电脑是已经安装好Visual Studio 2013并配置好OpenCV 2.4.10

要用OpenCV对路由器传输的实时图像进行处理,只需要让程序从网页获取图像,在while循环里不断把采集的图像转换成Mat矩阵(新版本的OpenCV正在逐步淘汰IplImage结构体)既可,令人欣喜的是,OpenCV里的VideoCapture类本身就能从网页获取图像,因此带来了极大的方便,具体如下:

  1. #include "opencv2/highgui/highgui.hpp"
  2. #include "opencv2/imgproc/imgproc.hpp"
  3. #include <iostream>
  4. #include <stdio.h>
  5. //头文件

  6. using namespace std;
  7. using namespace cv;

  8. /** @function main */
  9. int main(int argc, char** argv)
  10. {
  11.         Mat src;
  12.         cv::VideoCapture vcap;

  13.         const string address = "http://192.168.10.1:8080/?action=stream?dummy=param.mjpg";

  14.         if (!vcap.open(address))
  15.         {
  16.                 cout << "Error opening video stream" << endl;
  17.                 return -1;
  18.         }

  19.         cout << "Stream opened" << endl;

  20.         while (1)
  21.         {
  22.                
  23.                 vcap >> src;
  24.                 // your code here
  25.                 /// Show your results
  26.                 namedWindow("Cam", CV_WINDOW_AUTOSIZE);
  27.                 imshow("Cam", src);
  28.                 if (waitKey(2) == 27)
  29.                         break;
  30.                  // Press "Esc" to exit
  31.         }
  32.         return 0;
  33. }
复制代码


上文中如果address直接等于浏览器地址栏中输入的地址,将不能获取图像,一个解释是,需要让程序知道视频流是jpeg类型,因此“伪造”了一个jpeg文件名

下图是修改OpenCV官网的一个demo,亲测在路由上获取图像可行(分别从笔记本摄像头和路由器挂载的无线摄像头)


wr703n-rom.part1.rar (2 MB, 下载次数: 19)

wr703n-rom.part2.rar (2 MB, 下载次数: 18)

wr703n-rom.part3.rar (2 MB, 下载次数: 15)

wr703n-rom.part4.rar (1.05 MB, 下载次数: 16)
mjpg-streamer-r63.zip (510.15 KB, 下载次数: 42)
wr703n-rom.part1.rar (2 MB, 下载次数: 19)
wr703n-rom.part2.rar (2 MB, 下载次数: 18)
wr703n-rom.part3.rar (2 MB, 下载次数: 15)
wr703n-rom.part4.rar (1.05 MB, 下载次数: 16)
mjpg-streamer-r63.zip (510.15 KB, 下载次数: 42)


此帖出自RF/无线论坛

最新回复

厉害啊啊啊啊  详情 回复 发表于 2015-3-7 20:31

赞赏

1

查看全部赞赏

点赞 关注(2)
个人签名爱骑行,爱自由,爱科技,爱无尽的挑战和广阔的天地
 

回复
举报

2056

帖子

0

TA的资源

五彩晶圆(初级)

沙发
 
这个不错,感谢分享
此帖出自RF/无线论坛
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
感谢分享。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
此帖出自RF/无线论坛
个人签名我的博客
 
 
 

回复

3414

帖子

0

TA的资源

纯净的硅(高级)

4
 
这个好玩,以前在树莓派上折腾过
此帖出自RF/无线论坛
个人签名

So TM what......?

 

 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
楼主大神,我想请教个问题
代码中有:const string address = "http://192.168.10.1:8080/?action=stream?dummy=param.mjpg";
但是你下面又有 “上文中如果address直接等于浏览器地址栏中输入的地址,将不能获取图像,一个解释是,需要让程序知道视频流是jpeg类型,因此“伪造”了一个jpeg文件名”
代码中是mjpg,而你解释的是jpeg。
这个应该如何理解呢,
此帖出自RF/无线论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
厉害啊啊啊啊
此帖出自RF/无线论坛
 
 
 

回复

6

帖子

0

TA的资源

一粒金砂(中级)

7
 
22881916 发表于 2015-2-19 01:27
楼主大神,我想请教个问题
代码中有:const string address = "http://192.168.10.1:8080/?action=stream?dummy=param.mjpg";
但是你下面又有 “上文中如果address直接等于浏览器地址栏中输入的地址,将不能获取图像,一个解释是,需要让程序知道视频流是jpeg类型,因此“伪造”了一个jpeg文件名”
代码中是mjpg,而你解释的是jpeg。
这个应该如何理解呢,



jpg格式的视频流吧,具体的内容我也不太懂,没有深入了解视频流的知识
此帖出自RF/无线论坛
个人签名爱骑行,爱自由,爱科技,爱无尽的挑战和广阔的天地
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表