不知道爲什麼,csdn一直提示說含有被禁用的url,無法發表,需要的朋友到原地址看吧
http://www.
eefocus.com/sj229335457/blog/13-06/295352_ad954.html
和在pc機上一樣,建立 文件夾/opt/zedboard/opencv_zed,複製文件進來,解壓縮:建立兩個文件夾 build、 install,如下圖
在這裏和pc不太一樣了,需要設置編譯環境,在opencv-2.4.4下面新建一個文件,文件名爲toolchain.cmake,裏面的內容爲:
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-g++)
進入build文件裏面,輸入一下命令進行配置:cmake -D CMAKE_TOOLCHAIN_FILE=toolchain.cmake -D CMAKE_INSTALL_PREFIX=/opt/zedboard/opencv_zed/opencv-2.4.4/install ../
其中CMAKE_INSTALL_PREFIX,代表的是安裝的路徑,最好是新建一個新文件夾好保存,另外需要注意的是,最後的是 ../ 小心不要少敲一個點,否則會錯的哦。
ccmake ./ 進行配置,配置的內容是所有的以WITH開頭的選項全部選成OFF,(除了WITH_V4L 選爲ON)因爲這些需要第三方庫支持的,要是選擇這些的話就需要安裝第三方庫了。
按c配置,按g生成並保存
圖2
配置完成後就輸入make開始編譯,編譯完成後就是make install安裝啦。安裝完成後在install的文件夾裏就是運行庫啦。
新建一個專門寫程序的文件夾 mkdir /opt/zedboard/opencv_zed/code
在裏面新建一個測試程序:
vim edge_detection.cpp 這個代碼是教材裏面帶的那個:
/*code*/
#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 images
IplImage* 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;
}
複製一個lena圖像進來,最好是一個.jpg格式和一個.bmp格式(作對比),並輸入下面的命令進行交叉編譯
arm-xilinx-linux-gnueabi-g++ -I /opt/zedboard/opencv_zed/opencv-2.4.4/install/include -I/opt/zedboard/opencv_zed/opencv-2.4.4/install/include/opencv -L/opt/zedboard/opencv_zed/opencv-2.4.4/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
圖3
如果要是想在zedboard板卡上面運行,還需要將opencv交叉編譯運行的庫複製到板卡里面,和qt一樣,需要製作鏡像,opencv的話只需要將lib這個文件裏面的內容做成鏡像就可以了(如果用這個鏡像運行的話,會出現一個問題,就是在運行的時候找不到stdc++.so這個庫,因此需要先將這個庫copy到/opt/zedboard/opencv_zed/opencv-2.4.4/install/lib,源文件在交叉編譯器裏面,總的命令爲:
cp /root/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/lib/libstdc++.so* /opt/zedboard/opencv_zed/opencv-2.4.4/install/lib)。掛載到zedboard的/usr/lib 這個文件夾下面即可運行了:
製作鏡像過程:
圖4
至此就將opencv的庫移植好了,只需要掛載到板卡里面就OK啦