编译基于armV8架构的opencv,并在rock3a开发板上运行

近期在基于arm开发板做图像识别任务开发时,需要用到Opencv库

之前在做rknpu开发时,开发sdk里面已经集成了opencv 但是该opencv开发包不能实现imshow/VideoCapture等函数,经过调研,决定对opencv源代码进行编译,生成armv8架构可以使用的开发包

第一部 下载opencv:

opencv的下载路径为  https://opencv.org/releases/

这里下载3.x版本的  至于为什么用这个版本,我不得而知,因为之前用的就是3.x版本。目标我也不知道4.x版本和3.x版本之间的区别是什么。

第二步 就是下载armv8平台上的gcc和g++编译器

这里的aarch64 对应的就是avmv8的64位版本

 第三步  进入opencv源代码路径下,编译安装opencv源码

扫描二维码关注公众号,回复: 14647102 查看本文章

键入命令 mkdir  mybuild 新建一个文件夹 用来保存编译的文件

键入命令 mkdir  cv_sdk  用来保存编译后生成的库文件  头文件等文件

 第四步 安装cmake cmake-gui等c++编译环境  这里我已经安装完成 故不进行截图了

第五步 采用cmake-gui 搭建编译选项

点击next

 

这里需要选择第一个选项 也就是aarch64开头的cmake 文件,然后点击finish 

设置这两个值 分辨是cmake_build_type 和 cmake_install_prefix 

 

 选中with_gtk_2_x 去掉选中with_gtk

再次点击Configure 和 Generate 关闭cmake-gui 

第六步  键入命令sudo make -j4 && make install  

等待编译安装完成 

完成后就会得到 如下图所示的文件夹 bin是可执行文件夹 include是头文件夹  lib是库文件夹 share是cmake文件夹 

到此为止  arm版的opencv已经编译完成

接下来 我们采用cmake 和 已经编译好的 Opencv 写一个简单的图像处理程序 

这个程序有一个亮点 : 一个是将编译好的动态库文件和头文件  直接拷贝到当前文件目录下,这样的话就方便产品灵活部署,即在其他设备上 不用安装编译Opencv

下图为整个程序的架构

接下来看看CMakeLists.txt文件内容

cmake_minimum_required(VERSION 3.1)
project(opencv)
include_directories(/home/rock/opencv_test1/cv_sdk/include)
link_directories(/home/rock/opencv_test1/cv_sdk/lib)
add_executable(opencv opencv.cpp)
target_link_libraries(opencv /home/rock/opencv_test1/cv_sdk/lib/libopencv_highgui.so.3.4.5                            /home/rock/opencv_test1/cv_sdk/lib/libopencv_imgcodecs.so.3.4.5                             /home/rock/opencv_test1/cv_sdk/lib/libopencv_imgproc.so.3.4.5
/home/rock/opencv_test1/cv_sdk/lib/libopencv_video.so.3.4.5
/home/rock/opencv_test1/cv_sdk/lib/libopencv_core.so.3.4.5
/home/rock/opencv_test1/cv_sdk/lib/libopencv_videoio.so.3.4.5

        )

 接下来看看源文件

#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"


int main()
{
    cv::VideoCapture cap;
    cv::Mat srcImage = cv::imread("1.jpg");
    cv::Mat img;
    cv::cvtColor(srcImage, img, cv::COLOR_BGR2RGB);
    //cv::imwrite("resize_input.jpg", srcImage);
    cv::imwrite("resize_input.jpg", img);
    //cv::Mat img;
    cv::cvtColor(srcImage, img, cv::COLOR_BGR2RGB);
    cv::imshow("源图像",srcImage);
    cv::waitKey(0);
    return 0;
}

在build文件夹下进行编译 

,得到可执行文件 

说明opencv的编译是成功的

猜你喜欢

转载自blog.csdn.net/linxizi0622/article/details/128702048