OpenCV入门(一)Python环境的搭建
OpenCV入门(一)Python环境的搭建
因为有点Python基础,并且Python是比较好入门的编程语言,所以,机器视觉后面打算在Python这个平台下进行。
Windows平台OpenCV的Python开发环境搭建
1、Python 的下载与安装
Python是一种面向对象的解释型计算机程序设计语言,是纯粹的自由软件,遵循GPL(General Public License)协议。Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进,强调“段落”形式,第一个公开版发行于1991年。
Python的万能之处在于能够把用其他语言制作的各种模块(尤其是C/C++制作的模块)很轻松地联结在一起,也常被称为“胶水语言”。常见的一种应用情形是使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分用更合适的语言改写,比如用C/C++重写,而后封装为Python可以调用的扩展类库。
人工智能技术的火热使得Python的支持库越来越丰富、强大。需要注意的是,在使用扩展类库时可能需要考虑平台问题,某些类库可能不提供跨平台的实现。下面简单介绍Python的下载和安装。
去Python官网下载Python https://www.python.org/
截止目前,Python已经更新到了3.11版本了。
Windows下找到64位的,这个根据自己的电脑配置而定。
以我下载的64位安装文件为例,把文件下载下来后双击文件名运行安装文件,打开安装界面,如图2-2所示。注意,勾选上最后一项Add Python 3.11 to PATH,可以把Python安装目录加入PATH环境变量中,再单击Install Now继续安装。
Python本身大小很小,所以我直接安在了C盘,选择默认的路径即可。
学过Python的人都知道,在cmd命令下>>>下直接输入代码后按回车键就可以立刻得到代码执行结果。试着输入“100+200”,再打印一下“hello,world”,如图所示:
最后,用exit()退出Python提示符。
2、在线安装OpenCV-python
Python安装完成后,我们可以继续搭建OpenCV开发环境。所谓在线安装,意思是安装过程中要连着外网(Internet),边下载边安装。
要用Python开发OpenCV程序,首先要为Python安装配置OpenCV开发包。安装Python相关功能包需要用到pip,它是一个通用的Python包管理工具,提供了对Python包的查找、下载、安装、卸载的功能。如果安装了Python 3.x,就会默认安装pip工具,其位置在Python的安装路径下。比如,我的Python包管理工具pip.exe的路径位于C:\Users\mjl\AppData\Local\Programs\Python\Python311\Scripts
这个路径是64位系统的,读者可以查找一下自己计算机pip.exe的路径。打开命令行窗口,输入“pip”,如果出现很多选项,就说明pip工作正常了,如图所示。
下面利用pip来安装OpenCV开发环境。安装OpenCV开发环境只需要下载NumPy、Matplotlib、opencv-python三个包。
其中,NumPy包是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。Matplotlib包是Python中类似MATLAB的绘图工具,因为图像处理中有很多直方图统计之类的操作,所以选择了Matplotlib这个Python的第三方包。
安装NumPy和Matplotlib库,输入如下命令:
pip install numpy matplotlib
因为网络问题,这一步需要花点时间。
最后我们可以开始安装opencv-python了,输入如下命令:
pip install opencv-python
稍等片刻,opencv-python安装完成了,并且自动安装了当前比较成熟的最新版本,这里是4.。7.0.72。值得注意的是,不同时间段下载速度差异较大,强烈建议大家早上下载安装。至此,基于Python的OpenCV开发环境建立起来了,下面开始我们的第一个Python开发的OpenCV程序。可以使用记事本l来编辑这个程序。
保存成.py格式,双击运行即可。
首先利用import语句导入模块cv2(OpenCV是由很多个模块组成的,cv2是OpenCV中的一个基本模块)。使用as语法之后,只能通过as后面的名字来访问导入的模块,因此后面代码要用cv来代表cv2。
模块导入后,就可以使用cv2里的函数了。我们先利用函数cv.imread读取一个文件yd.jpg,该文件位于工程目录下(就是说和.py在同一目录下),cv.imread也可以传入一个绝对路径,比如d:\yd.jpg。
接着用函数imshow把图片显示在窗口中。函数waitKey用于等待用户按键,如果用户不按键,则图片窗口会一直显示,也就是函数waitKey一直处于阻塞状态不返回,直到用户按键才返回。waitKey结束后调用函数destroyAllWindows销毁所有窗口,这里就一个窗口,就是我们用namedWindow函数创建的窗口。
结果如图所示。运行成功,说明我们的opencv-python开发环境搭建成功了。
Windows平台PyCharm 下载与安装
和其他语言类似,Python程序的编写可以使用Windows自带的控制台进行,但是这种方式对于较为复杂的程序工程来说,容易混淆相互之间的层级和交互文件,因此在编写程序工程时建议使用专用的Python编译器PyCharm。
1、PyCharm的下载和安装
进入PyCharm官网的Download页面后可以选择不同的版本,如图所示,包括收费的专业版和免费的社区版。这里直接选择免费版本。
https://www.jetbrains.com/pycharm/
(2)文件下载下来后可以看到文件名为pycharm-community-2022。3.2.exe,双击运行进入安装界面,如图所示。选择好安装路径,直接单击Next按钮,安装即可。
或者按照下图指示安装。
安装完成后出现Finish按钮,单击该按钮安装完成,并重新启动计算机,如图2-15所示。
2.配置PyCharm开发OpenCV程序
单击桌面上新生成的图标进入PyCharm程序界面,首先是第一次启动的定位,如图所示。
创建一个新的工程,如图所示
进入界面配置选项,如图所示:
之后右击新建的工程名PyCharm,选择New→Python File命令新建一个helloworld.py文件,内容如图所示。
输入代码并单击菜单栏中的Run→run…运行代码,或者直接右击helloworld.py文件名,在弹出的快捷菜单中选择run命令。如果成功输出hello world,就表示PyCharm安装好了。
创建一个新项目后,在项目下执行OpenCV代码会有问题,提示CV2库找不到了。
此时需要对Python Interpreter做重新设置。
单击File→Setting,打开Setting窗口,如图所示,
单击左侧的Project:pythonProject→Python Interpreter菜单项,此时打开如图所示的Add Python Interpreter新窗口,选中Existing environment单选按钮,单击Interpreter项最右边的[插图]按钮,打开Select Python Interpreter窗口,按目录层次逐层查找Python开发包中的python.exe文件,找到后单击OK按钮,如图所示。
逐个窗口单击OK按钮,回到图所示的Setting窗口,在Python Interpreter中选择Python开发包中的python.exe文件作为解释器。此时,窗口上显示开发OpenCV程序所需要的开发包,如图2-24所示。单击OK按钮关闭配置窗口。
从图中可以看到,上面配置的Matplotlib、NumPy、opencv-python等开发包已经导入项目中,接下来就可以进行OpenCV编程了。
将照片放到工程目录下,用上面的代码:
编译完成!!
3.调试Python程序
导入事例代码:D:\mjl\Opencv4.5资料\图书资料\源码\0cd25082-1cfc-11ed-94cb-00163e36b535\OpenCV 4.5计算机视觉开发实战源码-ch02-ch14\OpenCV 4.5计算机视觉开发实战源码
和开发其他程序一样,Python程序有时候也需要调试,比如设置断点、运行到断点处、单步执行、监视某个变量等。
在PyCharm中单步调试Python程序非常简单,只需要设置好断点,单击鼠标所在的行,
然后按Shift+F9快捷键开始调试运行,接着就会执行到断点处,然后按Shift+F8快捷键开始单步执行(Shift+F7快捷键也可以单步执行,并且遇到函数还能进入函数里面执行),如图所示。
在窗口下方的Debug视图中,我们直接可以看到a这个变量的相关信息。通常,设置断点、单步执行、监视变量这三大手段用于调试基本够用了。
4.测试一下NumPy的数学函数
我们测试一下NumPy中的数学函数,看它是否能工作正常。
NumPy支持大量的维度数组与矩阵运算,并针对数组运算提供了大量的数学函数库,常用的数学函数如下:
· round(a, decimals=0, out=None):将小数a四舍五入到给定的小数位数。
· floor(a):取比小数a小的最大的整数,即向下取整。
· ceil(a):取比小数a大的最小的整数,即向上取整。其中,a可以是一个数字,也可以是一个数组.
import cv2 as cv #导入cv模块
import numpy as np
a = np.array([1.0,5.55, 123, 0.567, 25.532])
print("np.round(2.6) : " , np.round(2.4))
print("np.round(a,1):",np.round(a,1))
print("np.round(2.8) : " , np.round(2.8))
print("cvFloor(2.5) : " , np.floor(2.5))
print("cvFloor(2.6) : " , np.floor(2.6))
print("cvCeil(2.5) : " , np.ceil(2.5))
print("cvCeil(2.6) : " , np.ceil(2.6))
在上述代码中,我们分别实验了round、floor和ceil的简单使用。
相关文章:
OpenCV入门(一)Python环境的搭建
OpenCV入门(一)Python环境的搭建 因为有点Python基础,并且Python是比较好入门的编程语言,所以,机器视觉后面打算在Python这个平台下进行。 Windows平台OpenCV的Python开发环境搭建 1、Python 的下载与安装 Python是…...
3.查找算法:顺序查找和二分查找
查找查找,是指在一些数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程。列表查找(线性表查找):从列表中查找指定元素输入:列表,待查找元素输出:元素下标(…...
攻不下dfs不参加比赛(七)
标题 为什么练dfs题目总结重点为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手…...
精确光度预测计算工具:AGi32 Crack
什么是AGi32? AGi32首先是一种用于精确光度预测的计算工具:一种技术工具,可以计算任何情况下的照度,协助灯具放置和瞄准,并验证是否符合任意数量的照明标准。 然而,要增强对光度学结果的理解,还…...
47个SQL性能优化技巧,看到就是赚到
1、先了解MySQL的执行过程 了解了MySQL的执行过程,我们才知道如何进行sql优化。 (1)客户端发送一条查询语句到服务器; (2)服务器先查询缓存,如果命中缓存,则立即返回存储在缓存中的…...
汇川SV660N与基恩士 KV7500 控制器调试说明
1. 伺服相关部分配置 1.1 伺服相关版本 SV660N 试机建议使用“SV660N-Ecat_v0.09.xml”及以上设备描述文件。 SV660N 单板软件版本建议为“H0100901.4”及更高版本号。 1.2 相关参数说明 SV660N 对象字典中 60FD 的含义较 IS620N 有所更改:bit0、1、2 分别为负限位…...
图观 | ChatGTP是如何通过知识图谱回答问题的?
文/Emma Z1950年,图灵发表了具有里程碑意义的论文《计算机器与智能》(Computing Machinery and Intelligence),提出了一个关于机器人的著名判断原则——图灵测试,也被称为图灵判断,它指出如果第三者无法辨别…...
Mysql的索引
为什么写这篇文章呢~最近在梳理公司的数据库,在查看表结构的时候发现了这个 CREATE TABLE esp_5_N (ID int(11) NOT NULL AUTO_INCREMENT,pId int(11) DEFAULT NULL,EsFileId varchar(32) DEFAULT NULL,obligate1 varchar(45) DEFAULT NULL,obligate2 varchar(45) …...
计算机的发展
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…...
理解Spring中的依赖注入和控制反转
依赖注入(Dependency Injection)是一种面向对象编程的设计模式,用于解决对象之间的依赖关系。它的基本思想是将对象的创建和管理工作交给容器来完成,而不是在应用程序中手动创建和管理对象,从而达到松耦合、易维护、易…...
XXL-JOB
XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 官网:https://www.xuxueli.com/xxl-job/ 文档:分布式任务调度…...
「牛客网C」初学者入门训练BC134,BC136
🐶博主主页:ᰔᩚ. 一怀明月ꦿ ❤️🔥专栏系列:线性代数,C初学者入门训练 🔥座右铭:“不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错…...
华为OD机试题【翻转单词顺序】用 C++ 进行编码 (2023.Q1)
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明翻转单…...
4.Spring【Java面试第三季】
4.Spring【Java面试第三季】前言推荐4.Spring27_Aop的题目说明要求Spring的AOP顺序AOP常用注解面试题28_spring4下的aop测试案例业务类新建一个切面类MyAspect并为切面类新增两个注解:spring4springboot1.5.9pom测试类29_spring4下的aop测试结果aop正常顺序异常顺序…...
ZLibrary使用说明-Zlirbrary
ZLibrary使用说明如果您是一位书虫,那么ZLibrary是一个值得一试的网站。该网站提供了大量的免费电子书籍,涵盖了各种不同的主题和类别。下面是一些有关如何使用ZLibrary的详细说明:第1步:访问ZLibrary网站要使用ZLibraryÿ…...
TwinCAT3第三方伺服电机——汇川SV660N使用
目录 一、第三方伺服在TC3中配置和使用 二、xml文件拷贝 编辑 三、IO中扫描伺服 四、工程测试 五、汇川伺服参数设置说明 一、第三方伺服在TC3中配置和使用 在倍福控制系统中使用第三方伺服可以参见本人另一篇博客,有详细教程说明。本文仅仅对SV660N伺服设置…...
进制转换(二进制,八进制,十进制,十六进制)涵盖整数与小数部分,内容的图片全为手写【详细图解】
各种进制之间的相互转换1. 各进制表示数1.1 数码1.2 基数1.3 位权2. 十进制转换为其他进制2.1 整数部分2.2 小数部分3. 其他进制转换为十进制4. 二进制转换为八进制5. 二进制转换为十六进制6. 八进制转换为十六进制1. 各进制表示数 二进制:0,1逢二进一 八…...
谈谈XR关键技术及VR/AR/MR/XR关系
一、先别被VR/AR/MR/XR搞晕,说说区别虚拟现实(Virtual Reality,VR)、增强现实(Augmented Reality,AR)等业务以其三维化、自然交互、空间计算等完全不同于当前移动互联网的特性,被认为…...
acwing1562 微博转发(宽搜)
微博被称为中文版的 Twitter。 微博上的用户既可能有很多关注者,也可能关注很多其他用户。 因此,形成了一种基于这些关注关系的社交网络。 当用户在微博上发布帖子时,他/她的所有关注者都可以查看并转发他/她的帖子,然后这些人…...
如何使用Arsenal快速部署功能强大的Bug Bounty工具
关于Arsenal Arsenal是一个功能强大且使用简单的Shell脚本(Bash),该工具专为漏洞赏金猎人设计,在该工具的帮助下,我们可以轻松在自己环境中安装并部署目前社区中功能最为强大的网络侦查工具、漏洞扫描工具和其他安全研…...
(十)python网络爬虫(理论+实战)——正则表达式再讨论、常用正则表达式整理
系列文章目录 (1)python网络爬虫—快速入门(理论+实战)(一) (2)python网络爬虫—快速入门(理论+实战)(二) (3) python网络爬虫—快速入门(理论+实战)(三) (4)python网络爬虫—快速入门(理论+实战)(四) (5)...
MyBatis-Plus特性及插件整合
了解MyBatis-Plus 什么是MyBatis-Plus? mybatisPlus在mybatis的基础上继续针对CRUD操作进行优化,在原有的基础上提供了公共的接口BaseMapper,我们在创建接口Mapper时只需要继承这个接口即可调用MyBatisPlus已经提供好的方法,sql…...
应用篇|网络安全知识培训考试,答题小程序操作指引
网络安全知识培训考试,答题小程序操作指引关于全民防诈反诈宣传或者网络安全知识学习,如何进行组织一场微信线上答题考试?可以在小程序“护网专题信息安全知识竞答”,先创建一个学习单位/小组,再邀请成员加入单位/小组…...
官方不推荐@Autowired
1用lombok注解 2 构造器...
【牛客刷题专栏】0x0E:JZ6 从尾到头打印链表(C语言编程题)
前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录前言问题…...
Zeppelin安装
1、下载Zeppelin 下载地址:Download 2.解压 [rootguo147 install]# tar -zxvf zeppelin-0.10.0-bin-all.tgz -C ../soft/ //修改文件名 [rootguo147 soft]# mv zeppelin-0.10.0-bin-all/ zeppelin 3.配置 //进入conf 目录 [rootguo147 conf]# pwd /opt/soft/zepp…...
【蓝桥杯选拔赛真题38】python目标值判断 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析
目录 python目标值判断 一、题目要求 1、编程实现 2、输入输出 二、解题思路...
Python jieba分词如何添加自定义词和去除不需要长尾词
Python jieba分词如何添加自定义词和去除不需要长尾词 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 通过如下代码,读取一个txt的高频词汇: # 找到高频词汇t…...
云打包苹果证书生成、上架和应用截屏攻略
在使用apicloud或hbuilderx这些跨端的开发工具开发移动应用的时候,假如是打包ios应用,是需要生成苹果证书、证书profile文件,和对应用上架的。首先要普及一个概念,苹果的应用是无法像安卓那样挂在自己的服务器上下载直接安装就可以…...
洛谷 U91193:棋盘覆盖问题 ← 分治法
【题目来源】https://www.luogu.com.cn/problem/U91193【问题描述】 在一个2^k * 2^k(k≥0)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格。现在用4种不同形状的 L型(占3小格)骨牌覆…...
通过网站编辑发稿是怎么做的/互联网营销师报名
Android系统自带一个GridView和Gallery两个控件,GridView网格显示,Gallery单个浏览,两者结合起来可以真正实现Gallery浏览图片效果。本示例通过GridView和Gallery两个控件,模仿实现一个完整的仿Gallery图像集的图片浏览效果。效果…...
wordpress 调用模板/营销网络推广
326 设置和获取线程名称 (查看源码看了很多。。。) 在e325中,运行后的结果无法直接看出是哪个线程的,这节课解决这个问题。 【Thread类中设置、获取线程名称的方法】 void setName(String name) 字面意思 String getName() …...
网址大全汽车之家官方网/国外seo工具
Socket:两个程序通过一个双向的通信连接实现数据的交换,这个链接的一端就称为Socket 特性:持久链接,双向通信 首先要有服务器与客户端两端 开一个服务器server,引用node的核心模块net const net require("net"); const clients […...
怎么联网访问自己做的网站/qq空间秒赞秒评网站推广
原理很简单,根据你的给定的字段和之前设定的reduce值来分区 比如说 我先设置成 set mapreduce.job.reduces3; 然后将id 分成三个区,然后按成绩排序 select * from score distribute by s_id sort by s_score; 注:可能打印出来不是很明显&a…...
化妆品网站设计报告/小程序开发框架
搭建人才梯队,是为了储备人才或培养储备性人才,以提升人员整体能力,保证有持续的人才输送。但现实往往是,企业面临大量空缺岗位无人可用或“火线提拔”的人员无法胜任时,才想要搭建人才梯队。 临时开展的选拔工作&…...
网站里面嵌入的地图是怎么做的/新软件推广
缓存大量小文件?Redis是首选! 2011-07-14 13:41 QLeelulu cnblogs 我要评论(0) 字号:T | T缓存文件,我们可以选择用Web、文件系统或数据库来做,比如本文中列出的Nginx、MooseFS以及Redis。作者需要将3KW条小数据做缓存…...