计划要做基于树莓派的视频寻迹,第一步就是让树莓派能够获取摄像头的信息。最为简单的获取usb摄像头信息的办法就是opencv 现成的库。之前有一定的windows下的opencv的开发经验,所以就决定在树莓派上尝试opencv的简单开发。项目本身并不难,主要是让opencv跑起来。
首先给树莓派晒个照:
这个本身连接比较简单,我就连接了电源,HDMI转换器,键盘鼠标(一体),无线网卡,还有一个优盘。
因为没有带HDMI的接口的显示器,所以只能用转接头,买的是淘宝上比较便宜的那种没有外接供电的转接头,并没有出现网上说的烧机器的现象。无线网卡是比较常用的那款,在linux下是免驱的,插上就能用。
交代完了板子再来说下摄像头。我用的是罗技的720P的摄像头,也是免驱的,效果挺好。上一张照片:
接着就是尝试安装opencv了。基本上网上常见的讲安装opencv的方法共有两个,分别是命令行安装:
sudo apt-get update
sudo apt-get install libopencv-dev
但是我尝试在树莓派推荐的系统 Raspbian中安装提示安装包不存在,我又尝试修改了软件源,安装包还是不存在。。。
好吧,还有另一种安装途径:下载源码自己编译。我之间搭arm的开发环境的时候交叉编译过opencv,这种编译不过,这种揪心。但是抱着侥幸心理,我还是试了试,但是当程序只编译3%就报错时,我果断放弃了。
上官网看看有没有其他好的系统可以选,我就找到了ubuntu mate 。因为最近在做深度学习,倒腾了很久的ubuntu,对其有很高的好感度,所以果断的选择了ubuntu。去官网下载了系统,烧录sd卡,开机。
感觉上ubuntu mate比Raspbian稍微多吃一点资源,但是与其优势对比这点缺点可以忽略。
在ubuntu上顺利安装了opencv,但是在写程序编译的时候又有新的问题,就是我写的测试程序就是编译不过。后来在nanopi2的官网wiki上看到了一个opencv的测试程序,编译通过了,程序如下:
#include "opencv2/opencv.hpp" using namespace cv; int main(int, char**) { VideoCapture cap(0); // open the default camera if(!cap.isOpened()) // check if we succeeded return -1; Mat edges; namedWindow("edges",1); for(;;) { Mat frame; cap >> frame; // get a new frame from camera cvtColor(frame, edges, CV_BGR2GRAY); GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5); Canny(edges, edges, 0, 30, 3); imshow("edges", edges); if(waitKey(30) >= 0) break; } // the camera will be deinitialized automatically in VideoCapture destructor return 0; }
编译命令为:
g++ test.cpp -o test -lopencv_core -lopencv_highgui -lopencv_imgproc
最终的效果图如下:
之前opencv编译不过应该是依赖库没有加全。
在opencv 编译不过的情况下,我又找了其他的调用摄像头的方法,找到一个比较好用的,如下:
https://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/robot/image_processing/
这是一个利用python调用摄像头的方法,作者是做机器人的,所以对树莓派的gpio,i2c也多了自己的封装,这里用不到,只装了他的摄像头的库,运行良好,贴图:
具体操作步骤不在细述,可以直接看网页。
至此,摄像头方便的准备已经做好,下期介绍树莓派与小车底盘之间的连接。