上位机图像处理和嵌入式模块部署(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.mzph.cn/news/650623.shtml

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

相关文章

【Linux】Linux进程间通信

Linux进程间通信 一、进程间通信介绍1、概念2、进程间通信目的3、进程间通信的本质4、进程间通信分类 二、管道1、什么是管道2、匿名管道(1)匿名管道原理(2)pipe函数(3)匿名管道的使用步骤i、父进程调用pip…

Frontend - SASS / SCSS 文件使用

目录 一、安装所需依赖 1. django-compressor 2. django-sass-processor 二、settings.py 文件配置 三、html使用 1. 配置 2. 导入 一、安装所需依赖 1. django-compressor 2. django-sass-processor 安装依赖,可参考另一篇文章:Backend - 安…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一:The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二:The Java/XML…

贝叶斯增量式跨域适应:少样本 + 跨模态学习 + 知识保留和推断【fundus + OCT】,做视网膜病变

贝叶斯深度学习:增量式少样本学习跨域适应 贝叶斯多目标函数 跨模态学习 fundus OCT,做视网膜病变 核心思想设计网络:寻找分类模型、损失函数实验结果混淆矩阵与注意力图评估 总结 核心思想 论文:https://arxiv.org/pdf/2110.…

数学建模-------误差来源以及误差分析

绝对误差:精确值-近似值; 举个例子:从A到B,应该有73千米,但是我们近似成了70千米;从C到D,应该是1373千米,我们近似成了1370千米,如果使用绝对误差,结果都是3…

代码随想录算法训练营第32天 | 122.买卖股票的最佳时机II + 55. 跳跃游戏 + 45.跳跃游戏II

今日任务 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 122.买卖股票的最佳时机II - Medium 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i…

关于前端脚手架的依赖升级和去风险版本可能遇到的问题

一、升级依赖版本 1、检查过时依赖 npm outdated 2、根据具体情况,选择安全更新或全部更新到最新版本 2.1 安全更新(不破坏依赖间的联系) npm update 2.2 全部更新到最新版本 首先输入命令: npx npm-check-updates -u 执…

订单系统设计与营销系统整合的全面探讨

在电商领域,订单系统的设计至关重要,涉及到用户体验、营销费用分摊、以及各种参数的校验。本文将从多个角度深入探讨订单系统的设计,包括与营销系统的整合、营销费用分摊,以及下单前的各种参数校验。 1. 订单系统与营销系统整合 …

算法训练营Day58(单调栈1)

说明 单调栈适合寻找一个元素左边或右边第一个比自己大或小的元素 其作用是用力存放之前遍历过的元素 单调递减的栈是求比其小的元素 单调递增的栈是求比其大的元素 739. 每日温度 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 提醒 今天正式开…

在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作

前言:什么是操作筛选器 操作筛选器是 ASP.NET Core Web API 中的一种过滤器,用于在执行控制器操作(Action)之前或之后执行一些代码,完成特定的功能,比如执行日志记录、身份验证、授权、异常处理等通用的处…

Java多线程--线程的生命周期

文章目录 一、JDK1.5之前:5种状态五种状态1、新建2、就绪3、运行4、阻塞5、死亡 二、JDK1.5及之后:六种状态 Java语言使用 Thread类及其子类的对象来表示 线程,在它的一个完整的生命周期中通常要经历如下一些状态。 一、JDK1.5之前&#xf…

搜狐新闻客户端使用Kotlin之后对JSON解析框架的探索

本文字数:7488字 预计阅读时间:45分钟 01 引言 自2017年Google发布Kotlin语言之后,Android开发由原来的Java开始向Kotlin过度,目前绝大部分Android开发岗位基本要求就是熟练使用Kotlin。事实上,很多有着多年历史的项目…

CAD-autolisp(二)——选择集、命令行设置对话框、符号表

目录 一、选择集1.1 选择集的创建1.2 选择集的编辑1.3 操作选择集 二、命令行设置对话框2.1 设置图层2.2 加载线型2.3 设置字体样式2.4 设置标注样式(了解即可) 三、符号表3.1 简介3.2 符号表查找3.2 符号表删改增 一、选择集 定义:批量选择…

npm sill idealTree buildDeps 安装踩坑指南

参考:https://www.yuucn.com/a/1565526.html https://blog.csdn.net/m0_65066691/article/details/128168066 https://blog.csdn.net/Johanna51/article/details/123360477 通过如下指令获得用户配置文件目录, 删除.npmrc文件 npm config get usercon…

开发手札:Github Timeout 22

今天(2024.01.26日),提交github又出现了ssh connect timeout errorcode 22,不论是创建新的sshkey还是配置.ssh/config都没用。 偶然在知乎上看到了解决方案,只需要在host中添加: 140.82.113.4 githu…

【广度优先搜索】【拓扑排序】【C++算法】913. 猫和老鼠

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 广度优先搜索 拓扑排序 逆推 LeetCode913. 猫和老鼠 两位玩家分别扮演猫和老鼠,在一张 无向 图上进行游戏,两人轮流行动。 图的形式是:graph[a] 是一个列…

【Go 快速入门】基础语法 | 流程控制 | 字符串

文章目录 基础语法值变量常量运算符指针new 和 make 区别 字符串byte 和 rune 类型 流程控制for 循环If else 分支switch 分支 基础语法 项目代码地址:02-basicgrammar 值 基本类型值 Go 最基础的数据类型,比如整型、浮点型、布尔型。 复合类型值 …

List使用addAll()方法报错

当使用Arrays.asList方式创建出来的list&#xff0c;在使用addAll方法的时候报错如下&#xff1a; Exception in thread "main" java.lang.UnsupportedOperationException 这个问题记录下&#xff0c;以防以后忘记。 下面是代码 List<String> objects new A…

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

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

使用易语言编写桌面截图工具

使用易语言腾讯云ocr实现截屏识别文本&#xff0c;将识别文本发送百度翻译api实现翻译 视频地址&#xff1a; 易语言实现桌面截屏ocr翻译工具_哔哩哔哩_bilibili 代码地址&#xff1a; python_cut_tool: python截屏ocr翻译 (gitee.com)