4.2 RK3399项目开发实录-案例开发之OpenCV 编译和安装(wulianjishu666)

★嵌入式ARM开发全套案例代码:https://pan.baidu.com/s/1ksCQN__jD8ZrJhw8sWzhwQ?pwd=vvfz

3.3. OpenCV 编译和安装

不少客户遇到OpenCV的问题多集中在如何获取mipi摄像头的数据。因为OpenCV使用的V4l2协议和Rockchip编写的mipi摄像头驱动协议不同,所以不能直接使用OpenCV的摄像头API。本节讲述如何编译Opencv并添加GStreamer API支持。

3.3.1. 要求

  • OS: Ubuntu18.04 / Debian 10

  • OpenCV version: 3.4.15

  • Board: RK3399

3.3.2. 编译和安装

  1. 搭建python3.7虚拟环境

    # 依次安装gcc和cmake等编译环境
    # 安装python3.7-tk 和 python3.7-dev
    # 安装virtualenv虚拟环境
    sudo apt install gcc cmake git build-essential \
    python3-tk python3.7-dev \
    virtualenv
    
  2. 创建python3.7虚拟环境

    virtualenv -p /usr/bin/python3.7m /home/firefly/venv
    # 使用虚拟环境,如果想退出可以在终端输入 deactivate
    source /home/firefly/venv/bin/activate
    
  3. 安装Opencv所需的环境包

    # 安装编译环境、gtk包和相关编解码库
    sudo apt install cmake build-essential libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libjasper-dev# 注意!如果安装了rknn_toolkit(or lite)则不需要再安装Python-numpy,否则会导致rknn_toolkit(or lite)无法使用
    sudo apt install python-numpy
    
  4. 下载Opencv

    # 创建文件夹
    mkdir opencv
    cd opencv# 下载 opencv-3.4.15.zip
    wget https://github.com/opencv/opencv/archive/refs/tags/3.4.15.zip
    unzip opencv-3.4.15.zip
    
  5. 配置

    mkdir build
    cd build# 让 OpenCV 和 Python3 之间建立联系
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D 	PYTHON_DEFAULT_EXECUTABLE=$(python -c "import sys; print(sys.executable)")\
    -D PYTHON3_EXECUTABLE=$(python -c "import sys; print(sys.executable)")  \
    -D PYTHON3_NUMPY_INCLUDE_DIRS=$(python -c "import numpy; print (numpy.get_include())")  \
    -D PYTHON3_PACKAGES_PATH=$(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")  \
    ../opencv-3.4.15
    
  6. 如需支持Gstreamer API,则进行以下配置操作否则跳过

    sudo apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
    cmake -D WITH_GSTREAMER=ON ../opencv-3.4.15
    
  7. 编译安装

    # 如果板子内存不超过2G,建议不超过-j4
    make -j6
    # 安装的过程需要sudo权限
    sudo make install
    

3.3.3. 测试

  1. 测试

    source /home/firefly/venv/bin/activate
    git clone https://gitlab.com/firefly-linux/test_code/rkisp-v4l2.git
    cd mipi_video_demo/OpenCV_Python
    python3 opencv_gst_test.py
    
  2. opencv_gst_test.py 代码

    import numpy as np
    import cv2 as cv
    import os
    import timecap = cv.VideoCapture('v4l2src device=/dev/video1 ! video/x-raw, format=NV12, width=640, height=480, framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)if not cap.isOpened():print("Cannot capture from camera. Exiting.")os._exit()
    last_time = time.time()while(True):ret, frame = cap.read()this_time = time.time()print (str((this_time-last_time)*1000)+'ms')last_time = this_time;cv.imshow('frame', frame)if cv.waitKey(1) & 0xFF == ord('q'):breakcap.release()
    cv.destroyAllWindows()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764915.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

算法-排序,查找

1.排序 常用的排序算法有快速排序,归并排序. (1). 快速排序 以下是快速排序的基本步骤: a. 选择一个基准元素:通常选择序列的第一个元素作为基准元素。 b. 划分过程:将待排序的序列重新排序,所有比基准元素…

从零开始搭建游戏服务器 第六节 合理使用自定义注解+反射 简化开发流程

自定义注解 前言正文创建注解创建类扫描工具创建ProtoDispatcher类初始化Dispatcher协议的逻辑分发dispatcher使用注解标记方法测试 结语 前言 在前面几节我们将Login服的大体架构搭建了起来, 具体流程是这样的: 客户端上传protobuf协议到LoginServerL…

基于飞凌嵌入式i.MX6ULL核心板的电梯智能物联网关方案

电梯是现代社会中不可或缺的基础性设施,为人们的生产生活提供了很大的便捷。我国目前正处于城镇化的快速发展阶段,由此带动的城市基础设施建设、楼宇建设、老破小改造等需求也让我国的电梯行业处在了一个高速增长期。截至2023年年底,中国电梯…

「Linux系列」Shell echo命令/printf命令/test命令

文章目录 一、Shell echo命令二、Shell printf命令三、Shell test命令四、相关链接 一、Shell echo命令 echo 是 Unix 和 Linux 系统中常用的一个命令,用于在终端输出字符串或变量的值。这个命令非常基础且常用,通常用于脚本编写、命令行操作等场合。 …

UE5 GameMode C++函数 学习

已经尝试,确实能重启游戏 类描述符加了noplaceable过后即使是Actor也不能放到场景中了,关卡蓝图,GameMode,GameState这些就不能放场景中了 UFUNCTION(exec)

ruoyi-nbcio-plus基于vue3的flowable增加开始节点的表单绑定修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

Android Studio Gradle设置查看全部task

如果你在 Android Studio 的 Gradle 窗口中看不到所有的任务,你可以尝试以下步骤来解决这个问题 android studio 版本: Android Studio Iguana | 2023.2.1 Build #AI-232.10227.8.2321.11479570, built on February 22, 2024 打开 Android Studio 的设置…

行业官网:律师行业官网解决方案和案例

hello,我是大千UI工厂,从此篇开始介绍各行业官网建设的解决方案 和经典案例,本期介绍律师行业,欢迎老铁们关注、评论、如有设计需求可以私信我们。 一、高大上律师官网有什么作用 高大上官网对律师行业的作用主要体现在以下几个…

eNSP学习——GVRP基础配置

目录 一、什么是GVRP 二、实验内容 三、实验目的 四、实验步骤 五、实验拓扑 六、实验编址 七、实验步骤 7.1、基本配置 7.2、配置GVRP单向注册 7.3、配置GVRP双向注册 7.4、配置GVRP的Fixed模式 7.5、配置GVRP的Forbidden模式 需要完整的配置命令大全的可以点击链…

传输线和串扰(一):串扰的叠加以及耦合的起源

串扰是六大信号完整性问题之一。它是将不需要的信号从一个网络传输到相邻网络,并且发生在每对网络之间。网络包括信号路径和返回路径,它连接系统中的一个或多个节点。我们通常将具有噪声源的网络称为主动网络或攻击网络。产生噪声的网络称为安静网络或受…

Linux mkswap命令教程:如何设置Linux交换区(附实例详解和注意事项)

Linux mkswap命令介绍 mkswap命令用于在设备或文件上设置Linux交换区。设备参数通常是磁盘分区(例如/dev/sdb7),但也可以是文件。Linux内核不查看分区ID,但许多安装脚本假定十六进制类型82(LINUX_SWAP)的分…

机器学习 - 训练模型

接着这一篇博客做进一步说明: 机器学习 - 选择模型 为了解决测试和预测之间的差距,可以通过更新 internal parameters, the weights set randomly use nn.Parameter() and bias set randomly use torch.randn(). Much of the time you won’t know what…

STM32之HAL开发——手动移植HAL库

HAL库移植步骤 创建目录 配置启动文件 在\Drivers\CMSIS\Device\ST\stm32f1xx\Source\Templates\ARM目录下,根据你的芯片型号选择对应的启动文件,不同容量大小的芯片,对应的启动文件也不一样。 注意:在HAL库中,不同容…

HTML网页文档和DOM结构介绍

HTML网页文档和DOM结构介绍 HTML网页文档 HTML,全称为超文本标记语言(Hypertext Markup Language),是用来描述并定义内容结构的标记语言,它是构建任何网页和网络应用的最基础的组成部分。HTML文档由一系列的元素构成…

[SAP ABAP] SE11查询数据库表中的数据

我们可以通过事务码SE11查询对应数据库表中的详细数据 本次查询使用的数据库表名为MARA,具体操作如下所示: ① 输入事务码SE11进入ABAP字典操作界面,在数据库表搜索框中输入目标表名MARA,并点击【显示】按钮 ② 进入到显示表界面&#xff0…

c++翁恺

1、面向对象 Data:杯子的属性 Opera:杯子提供的服务 老师上课: C:按流程执行 C:定一个教室,有很多学生,投影仪,灯,每个学生反映不一样。 这个场景有什么东西&#xff0c…

关于Rust的项目结构的笔记

层级 PackageCrateModulePath Package cargo的特性, 构建、测试、共享Crate 组成: 一个 Cargo.toml 文件, 描述了如何构建这些 Crates至少包含一个 crate最多只能包含一个 library crate可以包含任意个 binary crate cargo new demo-pro 会产生一个名为 demo-pro 的 Packa…

【自记录】VS2022编译OpenSSL1.0.2u

因为突然要编译一个老工程,老工程里面用到了OpenSSL 1.0.x。 于是官网下载了最后一个1.0.x版本1.0.2u。 1 下载安装Perl 去Perl官网下载即可。 使用vcpkg直接安装也可以,比前者更方便 vcpkg install perl #根据实际路径调整 set PATHD:\vcpkg\downloa…

【C语言】linux内核pci_set_master

一、__pci_set_master static void __pci_set_master(struct pci_dev *dev, bool enable) {u16 old_cmd, cmd;pci_read_config_word(dev, PCI_COMMAND, &old_cmd); // 读取设备的PCI命令寄存器的当前值if (enable)cmd old_cmd | PCI_COMMAND_MASTER; // 如果要启用总线…

力扣● 503.下一个更大元素II ● 42. 接雨水

503.下一个更大元素II 与496.下一个更大元素 I的不同是要循环地搜索元素的下一个更大的数。那么主要是对于遍历结束后,单调栈里面剩下的那些元素。 如果直接把两个数组拼接在一起,然后使用单调栈求下一个最大值就可以。 代码实现的话,不用直…