Hi3559a移植Opencv3.0

主要参考圈圈虫博文。如有错误或侵权,联系删除。

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)

结果
在这里插入图片描述在这里插入图片描述在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ycdhqzhiai/article/details/84760163