如果还没有配置好SDK,请先看【WRTnode2R试用体验】WRTnode 2R SDK的搭建,固件的编译以及固件的刷写。
首先当然是下载OpenCV的源码,我这里的OpenCV版本是2.4.11。下载地址可以自行寻找,也可以直接在我这下载:
http://yangpeiwen.com/opencv-2.4.11.zip(87.4MB),当然最好的是一步到位,下载我的dl文件夹:
http://yangpeiwen.com/dl.zip(479MB),解压到wrtnode文件夹中,里面有opencv-2.4.11.zip。
下载好之后解压,然后安装cmake,并打开cmake-gui开始配置交叉编译。
- sudo apt-get install cmake cmake-qt-gui
- cmake-gui
复制代码
选好源码的目录,这里我在桌面上创建了一个目录叫opencv-mipsel,用来存放编译好的文件。
设置好之后点击Configure。
选择最后一个选项(交叉编译)。
在Operating System填上Linux,然后c和c++编译器选择 /home/ypw/Desktop/wrtnode/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-gcc这个编译器和 /home/ypw/Desktop/wrtnode/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-g++。这里的地址与你的SDK所在的路径有关,请不要直接复制。
Target Root就是/home/ypw/Desktop/wrtnode/staging_dir/目录。点击Finish之后会看到很多选项。
首先我们应该去掉WITH_GTK,WITH_FFMPEG,因为它们无法编译成功。(此处参考
opencv-2.4.4的交叉编译,事实上我勾上以后并不会编译GTK和FFMPEG,也就是说能编译成功,但是为了保险起见还是应当去掉)
然后还有CMAKE_INSTALL_PREFIX目录需要设置一下,这里我们选择了
/usr/local/openwrt。
最后点击Generate,然后进入openwrt-mipsel文件夹,输入make -j8开始编译。
- cd openwrt-mipsel
- make -j8
复制代码
编译过程中我出现过virtual memory exhausted: Cannot allocate memory错误,建议将虚拟机内存扩大到4GB以上。
编译过程中会看到各种花花绿绿的信息输出,不出意外的话大概需要编译十分钟。
完成以后我们就可以安装刚编译好的库了。
除此之外还需要将库和头文件复制到toolchain中。
- sudo cp -r /usr/local/openwrt/* /home/ypw/Desktop/wrtnode/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2
复制代码
然后我们就可以开始写我们的OpenCV程序了。参考
Reading and Writing Images and Video。
编译并上传到/root目录下:
- mipsel-openwrt-linux-g++ test.cpp -o test -lopencv_core -lopencv_highgui
- scp test root@192.168.8.1:/root
复制代码
如果你还没有给g++交叉编译器创建软链接,现在可以创建一个:
- sudo ln -s /home/ypw/Desktop/wrtnode/staging_dir/toolchain-mipsel_24kec+dsp_gcc-4.8-linaro_uClibc-0.9.33.2/bin/mipsel-openwrt-linux-g++ /usr/local/bin
复制代码
此外,我们还需要在WRTnode上安装OpenCV,不然会提示缺少库,就像这样:
./test: can't load library 'libopencv_highgui.so.2.4'
所以解决方法是:
Libraries ---> opencv
开启opencv的编译,然后修改Makefile文件,开启highgui。为什么要开启highgui呢?因为要用VideoCapture就必须
#include
。要用USB摄像头就得用VideoCapture,所以我们就改一下Makefile,把它编译进去。
Makefile的地址在
/home/ypw/Desktop/wrtnode/feeds/packages/libs/opencv/Makefile
我们需要修改为-DBUILD_opencv_highgui:BOOL=ON
然后在wrtnode目录执行make -j8,如果以前编译过了OpenCV,最好先 make clean 一下,因为我这里改了Makefile之后再编译,OpenCV并没有更新,clean之后才管用。
刷好新的固件之后,我们就可以在WRTnode上运行这个程序了。当然,刷完系统以后需要重新scp一下。
- scp test root@192.168.8.1:/root
复制代码
- ssh root@192.168.8.1
- echo 1 > /sys/bus/u***/devices/1-1.3/bConfigurationValue
- ./test
复制代码
我们可以看到,拍好了五张图片,每张大小在100kb左右。
在Ubuntu中安装opencv的方法是这样的:
- sudo apt-get install libopencv-dev
复制代码
编译:
安装好之后可以直接用g++编译,在本机运行即可测试是否满足我们的需求。只要不含imshow之类的函数,一般可以直接移植到WRTnode 中运行。一般情况下我们会现在ubuntu里写好程序,再放到WRTnode中。
- g++ test.cpp -o test -lopencv_core -lopencv_highgui
复制代码
0