移植opencv3.20到3519

1.移植环境:

2.移植步骤:

1)安装cmake-gui
shunzhi@ubuntu:~/hisi$ sudo apt-get install cmake-gui 
2)新建一个opencv目录存放opencv-3.2.0.zip,并解压
shunzhi@ubuntu:~/hisi$ mkdir opencv  
shunzhi@ubuntu:~/hisi$ ls  
opencv  opencv-3.2.0.zip  
shunzhi@ubuntu:~/hisi$ unzip opencv-3.2.0.zip -d opencv  
shunzhi@ubuntu:~/hisi$ cd opencv  
shunzhi@ubuntu:~/hisi/opencv$ mkidr build _install  
shunzhi@ubuntu:~/hisi/opencv$ ls  
build  opencv-3.2.0  _install  
3)配置opencv编译环境
shunzhi@ubuntu:~/hisi/opencv/opencv-3.2.0$ ls  
3rdparty  cmake           CONTRIBUTING.md  doc      LICENSE  platforms  samples  
apps      CMakeLists.txt  data             include  modules  README.md  
shunzhi@ubuntu:~/hisi/opencv/opencv-3.2.0$cmake-gui  

点击Browse Source选择~/hisi/opencv/opencv-3.2.0
点击Browse Build选择~/hisi/opencv/build
点击Configure

此时出现的对话框选择最后一项:Specify options for cross-compiling
点击NEXT
Operating System填写 arm-hisiv500-linux
C填写arm-hisiv500-linux-gcc
C++填写arm-hisiv500-linux-g++

点击finish,然后等待Configuration done
然后在出现的列表中修改CMAKE_INSTALL_PREFIX为~/hisi/opencv/_install
点击Generate
等待Generation done
之后关闭cmake软件。

4)编译opencv
shunzhi@ubuntu:~/hisi/opencv/build$make

编译中遇到的问题:  
../../lib/libopencv_core.so: undefined reference to `pthread_mutex_trylock'
../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_settype'
../../lib/libopencv_core.so: undefined reference to `dlsym'
../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_destroy'
../../lib/libopencv_imgcodecs.so: undefined reference to `pthread_create'
../../lib/libopencv_core.so: undefined reference to `pthread_mutexattr_init'
../../lib/libopencv_core.so: undefined reference to `dlopen'
../../lib/libopencv_imgcodecs.so: undefined reference to `pthread_join'
collect2: error: ld returned 1 exit status
modules/core/CMakeFiles/opencv_perf_core.dir/build.make:816: recipe for target 'bin/opencv_perf_core' failed
make[2]: *** [bin/opencv_perf_core] Error 1
CMakeFiles/Makefile2:1341: recipe for target 'modules/core/CMakeFiles/opencv_perf_core.dir/all' failed
make[1]: *** [modules/core/CMakeFiles/opencv_perf_core.dir/all] Error 2
Makefile:146: recipe for target 'all' failed
make: *** [all] Error 2

问题原因:
cmake不认识我定义的arm-hisiv500-linux系统标记,没有加上库pthread和rt的链接选项

解决方案:修改CMakeCache.txt文件192行处  
//Flags used by the linker.
CMAKE_EXE_LINKER_FLAGS:STRING= -lpthread -lrt
5)安装opencv
shunzhi@ubuntu:~/hisi/opencv/build$make install  
shunzhi@ubuntu:~/hisi/opencv/_install$ ls  
bin  include  lib  LICENSE  share  

3.测试

1)编译测试程序
shunzhi@ubuntu:~/hisi/opencv$ pwd
/home/shunzhi/hisi/opencv
shunzhi@ubuntu:~/hisi/opencv$ ls
build  _install  opencv-3.2.0  test
shunzhi@ubuntu:~/hisi/opencv$ cd test/
shunzhi@ubuntu:~/hisi/opencv/test$ ls
Makefile  opencv_hisi.c
shunzhi@ubuntu:~/hisi/opencv/test$ make
[Compiling] opencv_hisi.c ...
shunzhi@ubuntu:~/hisi/opencv/test$ ls
Makefile  opencv_hisi  opencv_hisi.c  opencv_hisi.o
shunzhi@ubuntu:~/hisi/opencv/test$ 
2)测试程序

opencv_hisi.c

#include <opencv/cv.h>
#include <opencv/highgui.h>
#include <stdio.h>

int main( int argc, char** argv )
{
    IplImage* pImg; // 声明IplImage指针
    // 载入图像,强制转化为Gray
    if( argc == 3 && (pImg = cvLoadImage( argv[1], 0)) != 0 )
    {
        IplImage* pImg2 = cvCreateImage(cvGetSize(pImg), pImg->depth, pImg->nChannels);
        cvCopy(pImg, pImg2, NULL);
        cvSaveImage(argv[2], pImg2);// 把图像写入文件
        cvReleaseImage( &pImg );    // 释放图像
        cvReleaseImage( &pImg2 );   // 释放图像
        printf("Success!\n");
        return 0;
    }
    printf("Fail!\n");
    return -1;
}

Makefile:

CC = arm-hisiv500-linux-g++

DEMOTAR = opencv_hisi
DEMOOBJ = opencv_hisi.o

CFLAGS += -g -Wall -I$(shell pwd)/../_install/include
LDFLAGS += -L$(shell pwd)/../_install/lib -Wl,-Bdynamic -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lpthread -lrt

%.o: %.c
    @echo "[Compiling] $< ..."
    @$(CC) $(CFLAGS) -c $<

all: $(DEMOTAR)

$(DEMOTAR):$(DEMOOBJ)
    @$(CC) -o $@ $^ $(LDFLAGS)

.PHONY : clean
clean:
    rm -rf $(DEMOOBJ) $(DEMOTAR)

5.测试结果

1)将opencv库拷贝到3519的开发板/usr/lib目录下。

/usr/lib # ls
libopencv_calib3d.so     libopencv_imgproc.so     libopencv_superres.so
libopencv_core.so        libopencv_ml.so          libopencv_video.so
libopencv_features2d.so  libopencv_objdetect.so   libopencv_videoio.so
libopencv_flann.so       libopencv_photo.so       libopencv_videostab.so
libopencv_highgui.so     libopencv_shape.so
libopencv_imgcodecs.so   libopencv_stitching.so

2)开发板执行测试程序

/mnt # ./opencv_hisi lena.jpg lena_test.jpg

注:

  • 测试程序功能是将彩色图片转化为灰色图片(彩转灰)。
  • lean.jpg文件在 opencv/opencv-3.2.0/samples/data/lena.jpg 位置。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值