Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39848
  • 博文数量: 42
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2014-10-30 10:34
文章分类
文章存档

2014年(42)

我的朋友

分类: 嵌入式

2014-12-04 15:34:45

和在pc机上一样,建立 文件夹/opt/zedboard/opencv_zed,复制文件进来,解压缩:建立两个文件夹 build install,如下图 
 
1
在这里和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

阅读(523) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~