主要参考圈圈虫博文。如有错误或侵权,联系删除。
1.安装准备
我这里把以前安装opencv脚本直接来了一遍,可以忽略。
/*
sudo apt-get update
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libjpeg8-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libopenblas-dev liblapack-dev libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
sudo apt-get install git cmake build-essential
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev
*/
为了方便管理,这里新建了三个文件夹:
mkdir opencv
cd opencv
mkdir build_arm64
mkdir install_arm64
git clone https://github.com/Itseez/opencv.git
cd opencv
git checkout 3.0.0
2.安装
打开cmake-gui,假设现在所处目录为build_arm64
选择对应的源目录和build目录,源目录当然就是git clone的opencv所在目录,build目录为新建的build_arm64,选择好对应的源码和build目录,点击configure,按照以下选项配置对应编译环境。
选中最后一个选项,点击Next
分别填上教程编译工具链所在位置,我使用的是aarch64-himix100-linux-g++。点击finish
第一次configure会报错,查看log信息是cuda错误,设置WITH_CUDA=OFF重新configure
设置
BUILD_SHARED_LIBS = OFF //生成静态库
CMAKE_INSTALL_PREFIX =install文件夹
WITH_PNG=OFF
点击
Generate
Generate成功就可以make了
make时候,一般会在60%报错,错误信息是缺少pthread库,这个错误搞了半天,参考了圈圈虫博文修改了对应编译选项在CMakeCache.txt里面加上了CMAKE_EXE_LINK_FLAGS:STRING = -lpthread -lrt –ldl重新编译仍然报错,后来基本上该文件每个LINK_FLAGS都加上了- lpthread,重新编译仍然报相同错误。后来在CMake-gui界面上搜索对应的关键字,加上编译选项通过。
填上对应的编译选项,重新编译通过
通过后,make install,会把相关文件copy到install_arm64目录,如图
我们需要的静态库全部在lib下面。
3.测试
demo.cpp
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat srcImage = imread("1.jpg");
Mat dstImage, edge, grayImage;
//imshow("Source image", srcImage);
/* 腐蚀 */
Mat element = getStructuringElement(MORPH_RECT, Size(15, 15));
erode(srcImage, dstImage, element);
imwrite("erode.jpg", dstImage);
/* 均值滤波 */
blur(srcImage, dstImage, Size(7, 7));
imwrite("blur.jpg", dstImage);
/* 边缘检查 */
dstImage.create(srcImage.size(), srcImage.type());
cvtColor(srcImage, grayImage, COLOR_BGR2GRAY);
blur(srcImage, edge, Size(3,3));
Canny(edge, edge, 3, 9, 3);
imwrite("canny.jpg", edge);
//imshow("Canny", edge);
//waitKey(0);
return 0;
}
Makefile
CC = aarch64-himix100-linux-g++
DIR = /root/workspace/opencv/install_arm64/
TARGETS := demo
LIBS = -lopencv_highgui \
-lopencv_imgproc \
-lopencv_core \
-lopencv_imgcodecs \
-lopencv_video \
-lopencv_hal \
-lpthread \
-ldl \
-lzlib \
-fopenmp \
-llibpng \
-llibjpeg \
INCLUDE = -I$(DIR)/include/
LIB_TARGET_DIR = -L$(DIR)/lib \
-L/$(DIR)/share/OpenCV/3rdparty/lib
all:$(TARGETS)
$(TARGETS):demo.cpp
$(CC) -std=c++11 $(CPPFLAGS) $(INCLUDE) $^ $(LIB_TARGET_DIR) $(LIBS) -o $@
clean:
rm -f *.o $(TARGETS)
结果