shunzhi@ubuntu:~/hisi$ sudo apt-get install cmake-gui
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
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软件。
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
shunzhi@ubuntu:~/hisi/opencv/build$make install
shunzhi@ubuntu:~/hisi/opencv/_install$ ls
bin include lib LICENSE share
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$
opencv_hisi.c
#include
#include
#include
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)
/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
/mnt # ./opencv_hisi lena.jpg lena_test.jpg
注:
opencv/opencv-3.2.0/samples/data/lena.jpg
位置。