上位机图像处理和嵌入式模块部署(python opencv)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们谈到了qt,谈到了opencv,也谈到了嵌入式,但是没有说明python在这个过程当中应该扮演什么样的角色。opencv从开发的角度来说,可以是配合python做算法验证,十分简洁、方便,毕竟python不需要自己来编译。从上位机的角度说,opencv还可以做成上位机工具,给fae使用。当然,它做到嵌入式模块里面也是可以的,这样的话,opencv就会被编译成arm代码,结合上位机工具一起去部署就可以了。所以,哪怕就是相同的opencv库,用法不同,场景不同,发挥的作用也是不一样的。

1、安装python软件

        python本身是一门脚本语言,建议大家可以安装一个较新的版本,比如说python3。

2、安装opencv包

        网上很多的教程,都是推荐大家直接用pip install去安装,其实这样安装的效率是很低的。建议大家在安装好python3之后,cd到Scripts目录下,利用pip和douban的软件源来安装opencv,这样效率要高很多。比如说,像这样,

pip3.exe install opencv-python -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

3、确认opencv已经安装好

        要想确认cv2已经安装好,只需要在python3目录下打开python,输入下面这个语句,如果没有报错的话,那就一切正常了,

import cv2

4、第一个python脚本的图像处理程序

        安装好了opencv之后,就可以写图像处理程序了。最简单的一个脚本,肯定就是显示一幅lena.png的图片了。我们可以打开一个编辑器,接下来就是输入下面这些脚本即可,

import cv2'''
main entry
''' 
def main():picture = cv2.imread('./lena.bmp')cv2.imshow('lena', picture)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':main()

5、执行脚本

        假设编写的脚本没有问题,我们就可以用python工具直接运行它就ok了。脚本的文件名如果是demo.py,那么可以这么来进行执行脚本,

C:\Python39\python.exe demo.py

        确认一下图片是否可以正常显示,能正常显示,那就代表问题不大了。

6、第一次用python实现灰化算法

        前面我们虽然显示了lena.png,但是没有自己用python写一个算法,算是一个小小的遗憾。这里,我们其实也可以通过python脚本,自己来实现一个灰化算法,这也是不错的一个选择。很多时候,对于一些成熟的算法,并不是我们自己不会写,而是说使用opencv更加方便一点,仅此而已。因为这样在出现问题的时候,才会知道怎么去调整和debug脚本,

import cv2
import numpy as np'''
use average value
'''
def generate_gray_data(picture):for i in range(picture.shape[0]):for j in range(picture.shape[1]):val = np.sum(picture[i,j])val = val/3picture[i,j] = [val, val, val]return picture'''
main entry
'''
def main():picture = cv2.imread('./lena.bmp')print(picture.shape[0])print(picture.shape[1])print(picture.shape[2])picture = generate_gray_data(picture)cv2.imshow('lena', picture)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':main()

7、分析和总结

        opencv作为一个库来说,本身无所谓好坏。我们使用它,也是为了实现特定的功能。它可以和c++配合,也可以和python进行搭档,一般来说我们处理的流程是这样的,如下图所示,大家可以熟记于心一下。python也好,c++也好,opencv也好,自己写算法也好,嵌入式开发也好,每一个步骤都有自己的用途。不存在谁取代谁的问题。这个过程当然可以简化,也可以添加新的流程,最终目的都是为了满足客户的需求,同时实现个人的价值和利益。

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

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

相关文章

风口抓猪-借助亚马逊云科技EC2服务器即刻构建PalWorld(幻兽帕鲁)私服~~~持续更新中

Pocketpair出品的生存类游戏《幻兽帕鲁》最近非常火,最高在线人数已逼近200万。官方服务器亚历山大,游戏开发商也提供了搭建私人专用服务器的方案,既可以保证稳定的游戏体验,也可以和朋友一起联机游戏,而且还能自定义经…

Websocket协议详解

前言 本文主要介绍Websocket是什么以及其协议内容。 WebSocket 协议实现在受控环境中运行不受信任代码的一个客户端到一个从该代码已经选择加入通信的远程主机之间的全双工通信。该协议包括一个打开阶段握手规定以及通信时基本消息帧的定义。其基于TCP之上。此技术的目标是为基…

分布式因果推断在美团履约平台的探索与实践

美团履约平台技术部在因果推断领域持续的探索和实践中,自研了一系列分布式的工具。本文重点介绍了分布式因果树算法的实现,并系统地阐述如何设计实现一种分布式因果树算法,以及因果效应评估方面qini_curve/qini_score的不足与应对技巧。希望能…

基于机器学习的地震预测(Earthquake Prediction with Machine Learning)

基于机器学习的地震预测(Earthquake Prediction with Machine Learning) 一、地震是什么二、数据组三、使用的工具和库四、预测要求五、机器学习进行地震检测的步骤六、总结 一、地震是什么 地震几乎是每个人都听说过或经历过的事情。地震基本上是一种自…

浪花 - 响应拦截器(强制登录)

1. 配置响应拦截器 import axios from axios;const myAxios axios.create({baseURL: http://localhost:8080/api/, });myAxios.defaults.withCredentials true;// 请求拦截器 myAxios.interceptors.request.use(function (config) {// Do something before request is sentc…

ubuntu设置右键打开terminator、code

前言: 这里介绍一种直接右键打开本地目录下的terminator和vscode的方法。 一:右键打开terminator 1.安装terminator sudo apt install terminator 2.安装nautilus-actions filemanager-actions sudo apt-get install nautilus-actions filemanager…

【小白教程】幻兽帕鲁服务器一键搭建 | 支持更新 | 自定义配置

幻兽帕鲁刚上线就百万在线人数,官方服务器的又经常不稳定,所以这里给大家带来最快捷的搭建教程,废话不多说直接开始。 步骤一:准备服务器 服务器建议 Linux 系统,资源占用低,而且一键脚本只需要一条命令&am…

如何使用宝塔面板配置Nginx反向代理WebSocket(wss)

本章教程,主要介绍一下在宝塔面板中如何配置websocket wss的具体过程。 目录 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 2、代理配置内容 三、注意事项 一、添加站点 二、申请证书 三、配置代理 1、增加配置内容 map $http_upgrade $connection_…

【TCP】传输控制协议

前言 TCP(Transmission Control Protocol)即传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。它由IETF的RFC 793定义,为互联网中的数据通信提供了稳定的传输机制。TCP在不可靠的IP层之上实现了数据传输的可…

常见电源电路(LDO、非隔离拓扑和隔离拓扑结构)

一、常见电路元件和符号 二、DC-DC转换器 DC-DC转换器:即直流-直流转换器,分为三类:①线性调节器;②电容性开关解调器;③电感性开关调节器; 2.1线性稳压器(LDO) 2.1.1 NMOS LDO…

【深度学习】sdxl中的 tokenizer tokenizer_2 区别

代码仓库: https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main 截图: 为什么有两个分词器 tokenizer 和 tokenizer_2? 在仔细阅读这些代码后,我们了解到 tokenizer_2 主要是用于 refiner 模型的。 #…

内存管理(mmu)/内存分配原理/多级页表

1.为什么要做内存管理? 随着进程对内存需求的扩大,和同时调度的进程增加,内存是比较瓶颈的资源,如何更好的高效的利于存储资源是一个重要问题。 这个内存管理的需求也是慢慢发展而来,早期总线上的master是直接使用物…

2.依附弹窗(AttachListPopup)

愿你出走半生,归来仍是少年! 环境:.NET 7 基于基础的Popup对象实现的依附于某个控件的弹窗,弹窗可呈现数组对象,达到较好的选择交互效果。 1.布局 通过Border实现圆角边框轮廓,然后通过内部的ListView实现列表展示。…

sql 行转列 日周月 图表统计

目录 目录 需求 准备 月 分析 按月分组 行转列 错误版本 正确版本 日 分析 行转列 周 分析 按周分组 行转列 本年 需求 页面有三个按钮 日周月,统计一周中每天(日),一月中每周(周),一年中每月(月),设备台数 点…

【C++11并发】mutex 笔记

简介 在多线程中往往需要访问临界资源,C11为我们提供了mutex等相关类来保护临界资源,保证某一时刻只有一个线程可以访问临界资源。主要包括各种mutex,他们的命名大都是xx_mutex。以及RAII风格的wrapper类,RAII就是一般在构造的时…

webug存在的越权漏洞-水平越权以及垂直越权的漏洞复现(超详解)

越权漏洞-webug、 1.登录 账号:admin 密码:admin 2.进入逻辑漏洞 3.进入越权修改密码靶场 (1)输入账号密码 进入进去会发现没有权限进入 方法一: 这里我们只需要将 127.0.0.1:8080/control/a/auth_cross/cross_a…

Higress 开源一周年:新版本,新标准,新工具,新征程

作者:Higress 团队 历程回顾 Higress 开源一年时间,一共发布了 18 个 release 版本,收获了 40 多位社区贡献者和 1800 star,上图是这一年过来达成的一些关键的里程碑。 前面半年通过集成开源生态,打磨开源版本稳定性…

Redis为什么速度快:数据结构、存储及IO网络原理总结

Redis,作为内存数据结构存储的佼佼者,其高性能表现一直备受赞誉。那么,Redis究竟是如何实现这一点的呢?接下来,我们将更深入地探讨其背后的关键技术,并提供进一步的优化策略。 一、内存存储与数据结构设计…

Neo4j 国内镜像下载与安装

Neo4j 5.x 简体中文版指南 社区版:https://neo4j.com/download-center/#community 链接地址(Linux版):https://neo4j.com/artifact.php?nameneo4j-community-3.5.13-unix.tar.gz 链接地址(Windows)&#x…

【Vue2 + ElementUI】分页el-pagination 封装成公用组件

效果图 实现 &#xff08;1&#xff09;公共组件 <template><nav class"pagination-nav"><el-pagination class"page-area" size-change"handleSizeChange" current-change"handleCurrentChange":current-page"c…