基于openwrt交叉编译opencv4.9.0版本

2024-04-25 05:36

本文主要是介绍基于openwrt交叉编译opencv4.9.0版本,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

源码包的获取

源码获取有两种方式,一种是通过编译时在makefile指定它的git地址,在编译时下载,这种很依赖网速,网速不好时,编译会失败。另一种是我们将源码的压缩包下载到本地,放到我们的SDK中,只需要解压编译就可以了,这里我们用第二种方式,选择我们需要的版本即可。
源码的下载链接: link
将我们下载好的opencv-4.9.0.tar.xz的压缩包放在SDK的dl/目录下

修改Makefile

SDK/feeds/packages/libs/opencv/Makefile,没有目录或者文件则新建

# Copyright (C) 2024 Fusion CCTV, Inc.
#
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
#include $(TOPDIR)/rules.mkPKG_NAME:=opencv
PKG_VERSION:=4.9.0
PKG_RELEASE:=1PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
PKG_SOURCE_URL:=http://sourceforge.net/projects/opencvlibrary/files/$(PKG_VERSION)/
PKG_MD5SUM:=b3e72c58db9b08a1f497f220a71e9332PKG_BUILD_DIR = $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSEPKG_INSTALL:=1
CMAKE_INSTALL:=1
CMAKE_BINARY_SUBDIR:=build
PKG_BUILD_PARALLEL:=0
PKG_USE_MIPS16:=0# We need to include python3-package.mk for the python variables
# but we are not a python package, so set PYTHON3_PKG_BUILD.
PYTHON3_PKG_BUILD:=0PKG_BUILD_DEPENDS:= \+OPENCV_PYTHON:python3/hostinclude $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
include $(TOPDIR)/feeds/packages/lang/python/python3-package.mkdefine Package/opencv/Default/descriptionOpenCV (Open Source Computer Vision Library) is an open source computervision and machine learning software library. OpenCV was built to providea common infrastructure for computer vision applications and to acceleratethe use of machine perception in the commercial products. Being aBSD-licensed product, OpenCV makes it easy for businesses to utilizeand modify the code.
endefdefine Package/opencv/defaultSECTION:=libsCATEGORY:=LibrariesTITLE:=opencvURL:=https://opencv.org/DEPENDS:= \+libpthread +librt +libatomic +libstdcpp +zlib +libjpeg +libwebp \+OPENCV_FFMPEG:ffmpeg \+OPENCV_FFMPEG:bzip2 \+OPENCV_FFMPEG:libffmpeg-full \+OPENCV_JPEG:libjpeg \+OPENCV_PYTHON:python3-numpy \+OPENCV_PYTHON:python3-numpy-src \+OPENCV_V4L:libv4l \+OPENCV_V4L:libv4l \+OPENCV_TIFF:libtiff \+OPENCV_PNG:libpng \+OPENCV_GSTREAMER:gstreamer1 \+OPENCV_GSTREAMER:gstreamer1-libs
endefdefine Package/opencv$(call Package/opencv/default)
endefifeq ($(CONFIG_OPENCV_FFMPEG),y)CMAKE_OPTIONS += -DWITH_FFMPEG=ON
elseCMAKE_OPTIONS += -DWITH_FFMPEG=OFF
endififeq ($(CONFIG_OPENCV_JPEG),y)CMAKE_OPTIONS += \-DWITH_JPEG=ON \-DBUILD_OPENJPEG=ON \-DBUILD_JPEG=ON
elseCMAKE_OPTIONS += \-DWITH_JPEG=OFF \-DBUILD_OPENJPEG=OFF \-DBUILD_JPEG=OFF
endififeq ($(CONFIG_OPENCV_PYTHON),y)CMAKE_OPTIONS += \-DBUILD_opencv_python2=OFF \-DBUILD_opencv_python3=ON \-DPYTHON3_INCLUDE_PATH=$(STAGING_DIR)/usr/include/python$(PYTHON3_VERSION) \-DPYTHON3_LIBRARIES=$(STAGING_DIR)/usr/lib/libpython$(PYTHON3_VERSION).so \-DPYTHON3_NUMPY_INCLUDE_DIRS=$(STAGING_DIR_ROOT)/usr/lib/python$(PYTHON3_VERSION)/site-packages/numpy/core/include \-DPYTHON3_PACKAGES_PATH=/usr/lib/python$(PYTHON3_VERSION)/site-packages
elseCMAKE_OPTIONS += \-DBUILD_opencv_python2=OFF \-DBUILD_opencv_python3=OFF
endififeq ($(CONFIG_OPENCV_V4L),y)CMAKE_OPTIONS += \-DWITH_LIBV4L=ON \-DWITH_v4L=ON
elseCMAKE_OPTIONS += \-DWITH_LIBV4L=OFF \-DWITH_v4L=OFF
endififeq ($(CONFIG_OPENCV_TIFF),y)CMAKE_OPTIONS += \-DWITH_TIFF=ON
elseCMAKE_OPTIONS += \-DWITH_TIFF=OFF
endififeq ($(CONFIG_OPENCV_PNG),y)CMAKE_OPTIONS += \-DWITH_PNG=ON
elseCMAKE_OPTIONS += \-DWITH_PNG=OFF
endififeq ($(CONFIG_OPENCV_GSTREAMER),y)CMAKE_OPTIONS += \-DWITH_GSTREAMER=ON
elseCMAKE_OPTIONS += \-DWITH_GSTREAMER=OFF
endififeq ($(CONFIG_OPENCV_PROTOBUF),y)CMAKE_OPTIONS += \-DBUILD_PROTOBUF=ON \-DWITH_PROTOBUF=ON
elseCMAKE_OPTIONS += \-DBUILD_PROTOBUF=OFF \-DWITH_PROTOBUF=OFF
endif# OpenCV component options
CMAKE_OPTIONS += \-DBUILD_opencv_freetype=ON \-DBUILD_DOCS=OFF \-DBUILD_PERF_TESTS=OFF \-DBUILD_TESTS=OFF \-DBUILD_WITH_DEBUG_INFO=OFF \-DDOWNLOAD_EXTERNAL_TEST_DATA=OFF \-DOPENCV_GENERATE_PKGCONFIG=ON \-DCMAKE_VERBOSE=OFF \-DOPENCV_ENABLE_PKG_CONFIG=ON# OpenCV build options
CMAKE_OPTIONS += \-DBUILD_WITH_STATIC_CRT=OFF \-DENABLE_CCACHE=OFF \-DENABLE_COVERAGE=OFF \-DENABLE_FAST_MATH=ON \-DENABLE_IMPL_COLLECTION=OFF \-DENABLE_NOISY_WARNINGS=OFF \-DENABLE_OMIT_FRAME_POINTER=ON \-DENABLE_PRECOMPILED_HEADERS=OFF \-DENABLE_PROFILING=OFF \-DOPENCV_WARNINGS_ARE_ERRORS=OFF \-DBUILD_opencv_gpu:BOOL=OFF \-DWITH_1394:BOOL=OFF -DBUILD_opencv_stitching=OFF \-DBUILD_opencv_superres:BOOL=OFF -DBUILD_opencv_ts:BOOL=OFF \-DBUILD_opencv_highgui=ON \-DBUILD_opencv_videostab=ON \-DWITH_GTK=OFF# OpenCV link options
CMAKE_OPTIONS += \-DCMAKE_INSTALL_RPATH_USE_LINK_PATH=OFF \-DCMAKE_SKIP_RPATH=OFF \-DCMAKE_USE_RELATIVE_PATHS=OFF# OpenCV packaging options:
CMAKE_OPTIONS += \-DBUILD_PACKAGE=OFF \-DENABLE_SOLUTION_FOLDERS=OFF \-DINSTALL_CREATE_DISTRIB=OFF# Cuda stuff
CMAKE_OPTIONS += \-DBUILD_CUDA_STUBS=OFF \-DBUILD_opencv_cudaarithm=OFF \-DBUILD_opencv_cudabgsegm=OFF \-DBUILD_opencv_cudacodec=OFF \-DBUILD_opencv_cudafeatures2d=OFF \-DBUILD_opencv_cudafilters=OFF \-DBUILD_opencv_cudaimgproc=OFF \-DBUILD_opencv_cudalegacy=OFF \-DBUILD_opencv_cudaobjdetect=OFF \-DBUILD_opencv_cudaoptflow=OFF \-DBUILD_opencv_cudastereo=OFF \-DBUILD_opencv_cudawarping=OFF \-DBUILD_opencv_cudev=OFF \-DWITH_CUBLAS=OFF \-DWITH_CUDA=OFF \-DWITH_CUFFT=OFF# NVidia stuff
CMAKE_OPTIONS += \-DWITH_NVCUVID=OFF \-DWITH_CAROTENE=OFF# AMD stuff
CMAKE_OPTIONS += \-DWITH_OPENCLAMDBLAS=OFF \-DWITH_OPENCLAMDFFT=OFF# Intel stuff
CMAKE_OPTIONS += \-DBUILD_WITH_DYNAMIC_IPP=OFF \-DWITH_INTELPERC=OFF \-DWITH_IPP=OFF \-DWITH_IPP_A=OFF# Smartek stuff
CMAKE_OPTIONS += -DWITH_GIGEAPI=OFF# Prosilica stuff
CMAKE_OPTIONS += -DWITH_PVAPI=OFF# Ximea stuff
CMAKE_OPTIONS += -DWITH_XIMEA=OFF# Non-Linux support (Android options) must remain OFF:
CMAKE_OPTIONS += \-DANDROID=OFF \-DBUILD_ANDROID_CAMERA_WRAPPER=OFF \-DBUILD_ANDROID_EXAMPLES=OFF \-DBUILD_ANDROID_SERVICE=OFF \-DBUILD_FAT_JAVA_LIB=OFF \-DINSTALL_ANDROID_EXAMPLES=OFF \-DWITH_ANDROID_CAMERA=OFF# Non-Linux support (Mac OSX options) must remain OFF:
CMAKE_OPTIONS += \-DWITH_AVFOUNDATION=OFF \-DWITH_CARBON=OFF \-DWITH_QUICKTIME=OFF# Non-Linux support (Windows options) must remain OFF:
CMAKE_OPTIONS += \-DWITH_CSTRIPES=OFF \-DWITH_DSHOW=OFF \-DWITH_MSMF=OFF \-DWITH_VFW=OFF \-DWITH_VIDEOINPUT=OFF \-DWITH_WIN32UI=OFF# Software/3rd-party support options:
CMAKE_OPTIONS += \-DBUILD_EXAMPLES=OFF \-DBUILD_JASPER=OFF \-DBUILD_OPENEXR=OFF \-DBUILD_PNG=OFF \-DBUILD_TIFF=OFF \-DBUILD_ZLIB=OFF \-DINSTALL_C_EXAMPLES=OFF \-DINSTALL_PYTHON_EXAMPLES=OFF \-DINSTALL_TO_MANGLED_PATHS=OFF# Disabled features (mostly because they are not available in OpenWRT)
CMAKE_OPTIONS += \-DWITH_CLP=OFF \-DWITH_GDAL=OFF \-DWITH_GPHOTO2=OFF \-DWITH_GSTREAMER_0_10=OFF \-DWITH_LAPACK=OFF \-DWITH_MATLAB=OFF \-DWITH_OPENCL=OFF \-DWITH_OPENCL_SVM=OFF \-DWITH_OPENEXR=OFF \-DWITH_OPENNI2=OFF \-DWITH_OPENNI=OFF \-DWITH_UNICAP=OFF \-DWITH_VA=OFF \-DWITH_VA_INTEL=OFF \-DWITH_VTK=OFF \-DWITH_XINE=OFFTARGET_LDFLAGS += -latomicdefine Build/InstallDev$(INSTALL_DIR) $(1)/usr/include$(CP) $(PKG_INSTALL_DIR)/usr/include/opencv4/ $(1)/usr/include/#$(CP) $(PKG_INSTALL_DIR)/usr/include/opencv2 $(1)/usr/include/$(INSTALL_DIR) $(1)/usr/lib$(CP) $(PKG_INSTALL_DIR)/usr/lib/libopencv* $(1)/usr/lib/
endefdefine Package/opencv/install$(INSTALL_DIR) $(1)/usr/lib$(CP) $(PKG_INSTALL_DIR)/usr/lib/libopencv* $(1)/usr/lib/ifeq ($(CONFIG_OPENCV_PYTHON),y)$(INSTALL_DIR) $(1)$(PYTHON3_PKG_DIR)cp -r  $(PKG_INSTALL_DIR)$(PYTHON3_PKG_DIR)/cv2 $(1)$(PYTHON3_PKG_DIR)/cv2mv $(1)$(PYTHON3_PKG_DIR)/cv2/python-$(PYTHON3_VERSION)/cv2.cpython-*.so \$(1)$(PYTHON3_PKG_DIR)/cv2/python-$(PYTHON3_VERSION)/cv2.cpython-$(PYTHON3_VERSION).so
endif
endef$(eval $(call BuildPackage,opencv))

更新扩展包

这些都准备就绪后,我们需要将我们的opencv在编译时勾选,先更新我们的扩展包,使其在make menuconfig时出现

./scripts/feeds update -a
./scripts/feeds install -a

make menuconfig

在make menuconfig后勾选我们的opencv扩展,在libraries->opencv
在这里插入图片描述
在这里插入图片描述

全编

make V=s

编译成功后查看目录和生成文件
解压编译后的开源包:
SDK/build_dir/target-mipsel_24kc_musl/opencv-4.9.0/
生成的库文件目录:
SDK/staging_dir/target-mipsel_24kc_musl/usr/lib

这篇关于基于openwrt交叉编译opencv4.9.0版本的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/933813

相关文章

MySQL中的交叉连接、自然连接和内连接查询详解

《MySQL中的交叉连接、自然连接和内连接查询详解》:本文主要介绍MySQL中的交叉连接、自然连接和内连接查询,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、引入二、交php叉连接(cross join)三、自然连接(naturalandroid join)四

idea maven编译报错Java heap space的解决方法

《ideamaven编译报错Javaheapspace的解决方法》这篇文章主要为大家详细介绍了ideamaven编译报错Javaheapspace的相关解决方法,文中的示例代码讲解详细,感兴趣的... 目录1.增加 Maven 编译的堆内存2. 增加 IntelliJ IDEA 的堆内存3. 优化 Mave

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Tomcat版本与Java版本的关系及说明

《Tomcat版本与Java版本的关系及说明》:本文主要介绍Tomcat版本与Java版本的关系及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Tomcat版本与Java版本的关系Tomcat历史版本对应的Java版本Tomcat支持哪些版本的pythonJ

IDEA中Git版本回退的两种实现方案

《IDEA中Git版本回退的两种实现方案》作为开发者,代码版本回退是日常高频操作,IntelliJIDEA集成了强大的Git工具链,但面对reset和revert两种核心回退方案,许多开发者仍存在选择... 目录一、版本回退前置知识二、Reset方案:整体改写历史1、IDEA图形化操作(推荐)1.1、查看提

JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)

《JDK多版本共存并自由切换的操作指南(本文为JDK8和JDK17)》本文介绍了如何在Windows系统上配置多版本JDK(以JDK8和JDK17为例),并通过图文结合的方式给大家讲解了详细步骤,具有... 目录第一步 下载安装JDK第二步 配置环境变量第三步 切换JDK版本并验证可能遇到的问题前提:公司常

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no

Mybatis从3.4.0版本到3.5.7版本的迭代方法实现

《Mybatis从3.4.0版本到3.5.7版本的迭代方法实现》本文主要介绍了Mybatis从3.4.0版本到3.5.7版本的迭代方法实现,包括主要的功能增强、不兼容的更改和修复的错误,具有一定的参考... 目录一、3.4.01、主要的功能增强2、selectCursor example3、不兼容的更改二、