日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Zedboard学习(八):zedboard移植opencv

發(fā)布時間:2025/3/21 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Zedboard学习(八):zedboard移植opencv 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

準(zhǔn)備工作

  • opencv源碼包下載:http://pan.baidu.com/s/1qXTKIdQ(opencv-2.4.9),后面我們要在虛擬機(jī)中編譯;
  • 搭建好zedboard在Linux下的交叉編譯環(huán)境,以前的博客有介紹(Zedboard學(xué)習(xí)(二):zedboard的Linux下交叉編譯環(huán)境搭建)。
  • zedboard官方SD卡啟動文件,把這些文件放到sd卡中即可。
  • 由于zedboard上運(yùn)行的是嵌入式linux,處理器是arm9,與pc的不同,代碼必須要經(jīng)過交叉編譯工具編譯后才可以執(zhí)行。
    注意:官方給出的這個版本是不帶圖形界面的,桌面版本的Linux我們可以自己使用虛擬機(jī)制作。(Zedboard學(xué)習(xí)(一):移植Ubuntu桌面操作系統(tǒng))

    移植

    首先要說明的是,往zedboard上移植opencv跟我們平時在pc上安裝opencv的過程不同。畢竟zedboard是嵌入式平臺很多東西都要刪減,而且zedboard官方移植的linux不帶圖形界面,我們要自己在命令行下配置環(huán)境。
    為了防止權(quán)限沖突,建議在root權(quán)限下操作,不在root權(quán)限下可能會報錯。

    1、先新建一個文件夾,存放所有文件:

    mkdir opencv_zed cd opencv_zed

    2、下載的源碼是opencv2.4.9.tar.gz,將其從windows下拷貝到虛擬機(jī)中(Ubuntu14.04下FTP服務(wù)器的搭建配置):

    拷貝到之前建立的opencv_zed目錄中,輸入指令:

    tar -zxvf opencv-2.4.9.tar.gz

    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為安裝目錄,這個要根據(jù)自己的目錄的路徑更改。

    5、生成Makefile文件。
    如果沒有安裝要先安裝cmake-curses-gui:

    sudo apt-get install cmake-curses-gui

    輸入指令,配置cmake:

    ccmake ./

    配置時我們只需要把所有with開頭的都選為OFF(除了WITH_V4L為ON,這個指的是linux的v4l(video for linux)組件);
    c鍵,是configure,保存配置;q鍵,退出;操作不做贅述,都有說明。

    6、編譯安裝:

    make -j4 make install

    最后會在之前建立的install文件夾下生成zedboard上的opencv庫。

    7、制作opencv鏡像:
    進(jìn)入到最初建立的目錄下,我們要在這個目錄下生成鏡像:

    cd /home/xhb/Study/OpenCV/opencv_zed

    鏡像的名字是opencv_lib.img,其大小為80M:

    dd if=/dev/zero of=opencv_lib.img bs=1M count=80

    將鏡像格式化為ext2格式:

    mkfs.ext2 -F opencv_lib.img

    增加寫權(quán)限:

    chmod go+w opencv_lib.img

    掛載這個鏡像,需要使用管理員權(quán)限:

    sudo mount opencv_lib.img -o loop /mnt

    拷貝編譯生成的opencv庫到掛載的鏡像中,路徑要根據(jù)自己的來修改:

    sudo cp -rf /home/xhb/Study/OpenCV/opencv_zed/opencv-2.4.9/install/* /mnt

    去掉寫權(quán)限:

    sudo chmod go-w opencv_lib.img

    取消掛載:

    sudo umount /mnt

    這個鏡像文件已經(jīng)制作好了,后面直接使用。

    8、編寫測試程序并編譯:
    測試源碼為edge_detection.cpp:

    #include "cv.h" #include "highgui.h"IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture) {if (in->nChannels != 1)return 0; // Canny only handles gray scale imagesIplImage* out = cvCreateImage( cvGetSize( in ),in->depth, //IPL_DEPTH_8U, 1);cvCanny( in, out, lowThresh, highThresh, aperture );return( out ); };int main( int argc, char** argv ) {if(argc!= 3) printf("arguments error! format origin_image.bmp target_image.bmp\n");IplImage* img_rgb = cvLoadImage( argv[1] );IplImage* img_gry = cvCreateImage( cvSize( img_rgb->width, img_rgb->height ), img_rgb->depth, 1); cvCvtColor(img_rgb, img_gry ,CV_BGR2GRAY);// cvNamedWindow("Example Gray", CV_WINDOW_AUTOSIZE );// cvNamedWindow("Example Canny", CV_WINDOW_AUTOSIZE );// cvShowImage("Example Gray", img_gry );IplImage* img_cny = doCanny( img_gry, 10, 100, 3 );if(cvSaveImage(argv[2], img_cny,0) != 0)printf("Save Image Successful\n");// cvShowImage("Example Canny", img_cny );// cvWaitKey(0);cvReleaseImage( &img_rgb);cvReleaseImage( &img_gry);cvReleaseImage( &img_cny);// cvDestroyWindow("Example Gray");// cvDestroyWindow("Example Canny");return 0; }

    對它進(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

    由于沒有配置默認(rèn)的opencv環(huán)境變量,所以我們編譯時手動指定了用到的庫。
    由于只是測試,不做其他配置,那些一大串的路徑根據(jù)自己的路徑更改。

    編譯后會產(chǎn)生edge_detection.o文件。
    現(xiàn)在我們的目錄下應(yīng)該有這幾個文件:

    9、把edge_detection.o、opencv_lib.img、以及l(fā)ena.bmp(隨便下張圖片都行)拷貝到u盤中。

    為了方便管理我新建了一個文件夾存放這些文件,只要找得到就行。

    10、將官方的sd卡啟動文件拷貝到sd卡中,zedboard從sd卡啟動。
    u盤通過USB轉(zhuǎn)OTG線連接到zedboard上;
    從設(shè)備管理器中找到串口端口號;
    使用putty連接zedboard,串口波特率是115200;

    啟動zedboard,等待一下,命令行出現(xiàn):

    輸入指令:

    fdisk -l


    我們從中可以看到有兩個設(shè)備,3980MB的是我們的sd卡,1967MB的就是U盤了。
    下面可以找到它的設(shè)備號為/dev/sda4。

    掛載u盤:

    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)行邊緣檢測,輸出到out.bmp。

    ./edge_detection.o lena.bmp out.bmp

    運(yùn)行成功。

    由于沒有圖形界面,我們把u盤拔出,到電腦里看下out.bmp。

    移植成功!

    總結(jié)

    以上是生活随笔為你收集整理的Zedboard学习(八):zedboard移植opencv的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。