前言:相信大家玩過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;
}