Zedboard学习(八):zedboard移植opencv
準(zhǔn)備工作
由于zedboard上運(yùn)行的是嵌入式linux,處理器是arm9,與pc的不同,代碼必須要經(jīng)過(guò)交叉編譯工具編譯后才可以執(zhí)行。
注意:官方給出的這個(gè)版本是不帶圖形界面的,桌面版本的Linux我們可以自己使用虛擬機(jī)制作。(Zedboard學(xué)習(xí)(一):移植Ubuntu桌面操作系統(tǒng))
移植
首先要說(shuō)明的是,往zedboard上移植opencv跟我們平時(shí)在pc上安裝opencv的過(guò)程不同。畢竟zedboard是嵌入式平臺(tái)很多東西都要?jiǎng)h減,而且zedboard官方移植的linux不帶圖形界面,我們要自己在命令行下配置環(huán)境。
為了防止權(quán)限沖突,建議在root權(quán)限下操作,不在root權(quán)限下可能會(huì)報(bào)錯(cuò)。
1、先新建一個(gè)文件夾,存放所有文件:
mkdir opencv_zed cd opencv_zed2、下載的源碼是opencv2.4.9.tar.gz,將其從windows下拷貝到虛擬機(jī)中(Ubuntu14.04下FTP服務(wù)器的搭建配置):
拷貝到之前建立的opencv_zed目錄中,輸入指令:
3、在opencv-2.4.9中新建install和build文件夾,并創(chuàng)建toolchain.cmake文件。
cd opencv-2.4.9/ mkdir build mkdir install touch toolchain.cmake gedit toolchain.cmake復(fù)制如下內(nèi)容到toolchain.cmake中:
set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_C_COMPILER arm-xilinx-linux-gnueabi-gcc) set(CMAKE_CXX_COMPILER arm-xilinx-linux-gnueabi-g++)這類指定了cmake的處理器信息還有交叉編譯工具等。
4、進(jìn)入build文件夾,關(guān)聯(lián)toolchain.cmake 并配置OpenCV的安裝目錄:
cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.cmake -D CMAKE_INSTALL_PREFIX=/home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install ../CMAKE_INSTALL_PREFIX為安裝目錄,這個(gè)要根據(jù)自己的目錄的路徑更改。
5、生成Makefile文件。
如果沒(méi)有安裝要先安裝cmake-curses-gui:
輸入指令,配置cmake:
ccmake ./配置時(shí)我們只需要把所有with開(kāi)頭的都選為OFF(除了WITH_V4L為ON,這個(gè)指的是linux的v4l(video for linux)組件);
c鍵,是configure,保存配置;q鍵,退出;操作不做贅述,都有說(shuō)明。
6、編譯安裝:
make -j4 make install最后會(huì)在之前建立的install文件夾下生成zedboard上的opencv庫(kù)。
7、制作opencv鏡像:
進(jìn)入到最初建立的目錄下,我們要在這個(gè)目錄下生成鏡像:
鏡像的名字是opencv_lib.img,其大小為80M:
dd if=/dev/zero of=opencv_lib.img bs=1M count=80將鏡像格式化為ext2格式:
mkfs.ext2 -F opencv_lib.img增加寫(xiě)權(quán)限:
chmod go+w opencv_lib.img掛載這個(gè)鏡像,需要使用管理員權(quán)限:
sudo mount opencv_lib.img -o loop /mnt拷貝編譯生成的opencv庫(kù)到掛載的鏡像中,路徑要根據(jù)自己的來(lái)修改:
sudo cp -rf /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/* /mnt去掉寫(xiě)權(quán)限:
sudo chmod go-w opencv_lib.img取消掛載:
sudo umount /mnt這個(gè)鏡像文件已經(jīng)制作好了,后面直接使用。
8、編寫(xiě)測(cè)試程序并編譯:
測(cè)試源碼為edge_detection.cpp:
對(duì)它進(jìn)行交叉編譯:
arm-xilinx-linux-gnueabi-g++ -I /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/include -I /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/include/opencv -L /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann ./edge_detection.cpp -o ./edge_detection.o由于沒(méi)有配置默認(rèn)的opencv環(huán)境變量,所以我們編譯時(shí)手動(dòng)指定了用到的庫(kù)。
由于只是測(cè)試,不做其他配置,那些一大串的路徑根據(jù)自己的路徑更改。
編譯后會(huì)產(chǎn)生edge_detection.o文件。
現(xiàn)在我們的目錄下應(yīng)該有這幾個(gè)文件:
9、把edge_detection.o、opencv_lib.img、以及l(fā)ena.bmp(隨便下張圖片都行)拷貝到u盤(pán)中。
為了方便管理我新建了一個(gè)文件夾存放這些文件,只要找得到就行。
10、將官方的sd卡啟動(dòng)文件拷貝到sd卡中,zedboard從sd卡啟動(dòng)。
u盤(pán)通過(guò)USB轉(zhuǎn)OTG線連接到zedboard上;
從設(shè)備管理器中找到串口端口號(hào);
使用putty連接zedboard,串口波特率是115200;
啟動(dòng)zedboard,等待一下,命令行出現(xiàn):
輸入指令:
fdisk -l
我們從中可以看到有兩個(gè)設(shè)備,3980MB的是我們的sd卡,1967MB的就是U盤(pán)了。
下面可以找到它的設(shè)備號(hào)為/dev/sda4。
掛載u盤(pán):
mount /dev/sda4 /mnt先找到我們存放鏡像的目錄:
把生成的opencv鏡像文件掛載到/usr/lib文件夾中:
cd /usr mkdir lib mount /mnt/zed_opencv_test/opencv_lib.img /usr/lib運(yùn)行可執(zhí)行文件,讀入lena.bmp,進(jìn)行邊緣檢測(cè),輸出到out.bmp。
./edge_detection.o lena.bmp out.bmp運(yùn)行成功。
由于沒(méi)有圖形界面,我們把u盤(pán)拔出,到電腦里看下out.bmp。
移植成功!
總結(jié)
以上是生活随笔為你收集整理的Zedboard学习(八):zedboard移植opencv的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win10+ubuntu双系统下,ubu
- 下一篇: 个人新博客开通