OpenCV入门(一)Python环境的搭建

news2025/1/18 19:03:08

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的简单使用。

在这里插入图片描述

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

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

相关文章

Unity UGUI 拖拽组件

效果展示 使用方式 拖到图片上即可用 父节点会约束它的活动范围哦~ 父节点会约束它的活动范围哦~ 父节点会约束它的活动范围哦~ 源码 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems;/// <summary> /…

2023年蜂巢科技最新面试题

2023年蜂巢科技最新面试题 bio与nio的区别 bio同步阻塞io&#xff1a;在此种⽅式下&#xff0c;⽤户进程在发起⼀个IO操作以后&#xff0c;必须等待IO操作的完成&#xff0c;只有当真正完成了IO操作以后&#xff0c;⽤户进程才能运⾏。JAVA传统的IO模型属于此种⽅式&#xff0…

易观:商业银行持续发力趣味营销活动,助力提升手机银行用户活跃度

易观&#xff1a;随着数字化时代发展&#xff0c;商业银行仍需持续在场景营销领域积极探索创新&#xff0c;坚持以用户为中心&#xff0c;开展千人千面的趣味营销活动&#xff0c;增强手机银行的互动性&#xff0c;完善活动参与的用户体验&#xff0c;提升营销活动效果&#xf…

了解高并发场景下的限流算法和解决方案

想必大家在做项目的时候&#xff0c;或多或少的都遇到过一些高并发的场景&#xff0c;这里主要是和大家一起来探讨下有关高并发下的处理方案。 常见的限流算法 1. 计数器 直接计数&#xff0c;简单暴力&#xff0c;举个例子&#xff1a; 比如限流设定为1小时内10次&#xff…

【Maven】(四)图解Maven3依赖的功能特性:依赖范围、依赖传递、依赖冲突

文章目录1.前言2.pom中的依赖配置2.1.依赖的概念2.2.依赖传递2.3.可选依赖 [optional]2.4.依赖范围 [scope]2.4.1.scope的分类2.4.2.依赖范围对依赖传递的影响2.5.依赖冲突2.5.1.直接依赖2.5.2.间接依赖2.6.依赖排除 [exclusions]3.总结1.前言 本系列文章记录了 Maven 从0开始…

搭建XXL-JOB

搭建XXL-JOB 1、 调度中心 首先下载XXL-JOB GitHub&#xff1a;GitHub - xuxueli/xxl-job: A distributed task scheduling framework.&#xff08;分布式任务调度平台XXL-JOB&#xff09; 码云&#xff1a;xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开…

JDK17 下载与安装

JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心&#xff0c;它包含了JAVA的运行环境&#xff08;JVMJava系统类库&#xff09;和JAVA工具。 1、下载JDK17 1.1、首先&#xff0c;检查下电脑中是否安装jd…

车机系统开发——Android Automotive

Android Automotive介绍 Android Automotive是⼀个基本的Android平台&#xff0c;它运⾏预安装的&#xff08;车载信息娱乐&#xff09;IVI系统&#xff0c;Android应⽤程序以及可选的第⼆⽅和第三⽅Android应⽤程序。 Android Automotive的硬件抽象层(HAL)为Android框架提供…

封装小程序request请求[接口函数]

在这篇小程序API的Promise化文章中讲到小程序官方提供的异步API都是基于回调函数来实现的&#xff0c;在大量的使用这种回调函数就会造成回调地狱的问题&#xff0c;以及代码的可读性和可维护性差&#xff0c;通过对小程序API的Promise化能解决&#xff0c;那么本篇是来讲进行对…

203. 移除链表元素 L2-027 名人堂与代金券

给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 示例 2&#xff1a; 输入&#…

内网离线安装docker-ce工具,带你来了解!

虽然通常我们都是使用网络来安装 docker 的&#xff0c;但是对于安全要求比较高的业务或者用户来说&#xff0c;部署产品需要在内网部署&#xff0c;而内网通常是无法访问外部网络的&#xff0c;所以就需要通过内网进行安装了。 1. yum 离线安装包获取方法 下载软件包 这里以…

语义分割数据标注案例分析

语义分割&#xff08;Semantic Segmentation&#xff09;是计算机视觉领域中的一种重要任务&#xff0c;它的目的是将图像中的每个像素分配到对应的语义类别中。简单来说&#xff0c;就是将一张图像分割成多个区域&#xff0c;并为每个像素指定一个标签&#xff0c;标识出它属于…

实时手势识别(C++与python都可实现)

一、前提配置&#xff1a; Windows&#xff0c;visual studio 2019&#xff0c;opencv&#xff0c;python10&#xff0c;opencv-python&#xff0c;numpy&#xff0c;tensorflow&#xff0c;mediapipe&#xff0c;math 1.安装python环境 这里我个人使用的安装python10&#…

MySQL进阶篇之MySQL管理

07、MySQL管理 7.1、系统数据库 MySQL数据库安装完成后&#xff0c;自带了四个数据库&#xff0c;具体作用如下&#xff1a; 数据库含义mysql存储MySQL服务器正常运行所需要的各种信息&#xff08;时区、主从、用户、权限等&#xff09;information_schema提供了访问数据库元…

科技赋能智慧警务,“链上天眼科技助警中国行”在京启动

2月28日&#xff0c;由全球领先的区块链大数据科技企业欧科云链和中国警察网联合举办的“链上天眼科技助警中国行”活动&#xff08;下称“活动”&#xff09;&#xff0c;在北京正式启动。为了普及区块链基础知识&#xff0c;以及虚拟货币犯罪追踪与打击的新型技术应用经验&am…

(三)随处可见的LED广告屏是怎么工作的呢?接入GUI

续上文&#xff0c;本篇我们将尝试接入一个GUI来控制点阵屏。在前两篇中&#xff0c;我们相继介绍了点阵屏的控制原理&#xff0c;以及如何让点阵屏按照我们所想的进行显示。本篇将在此基础上接入一个GUI&#xff0c;使点阵屏的控制更加优雅。限于阅读体验和展示效果&#xff0…

王道计算机网络课代表 - 考研计算机 第一章 计算机网络体系结构 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机网络 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “计算机网络体系结构” 章节知识点总结的十分全面&#xff0c;涵括了《计算机网络…

SpringMVC之JSON工具:Jackson Gson 和fastjson通过JSON工具来解决文字乱码和时间格式问题——通过JSON工具生成JSON

什么是Json&#xff1f; JSON&#xff1a;JavaScript Object NotationJS对象 它是一种轻量级的数据交换格式JSON&#xff08;当前是交互的顶流&#xff09;&#xff0c;它自身具有独立的编程格式&#xff0c;它的特点是简洁和清晰&#xff0c;Json的存在大大改造了网络传输的…

ffmpeg音视频解码和渲染流程

背景&#xff1a; 随着游戏娱乐等直播业务的增长&#xff0c;在移动端观看直播的需求也日益迫切。但是移动端原生的播放器对各种直播流的支持却不是很好。Android 原生的 MediaPlayer 不支持 flv、hls 直播流&#xff0c;iOS 只支持标准的 HLS 流。本文介绍一种基于 ffplay 框…

挑选销售自动化工具应该关注什么功能?

销售自动化可以极大地提高你的生产力和效率&#xff0c;每周都为你节省时间。这样&#xff0c;你就可以把更多的时间用于完成交易&#xff0c;而减少用于行政任务的时间。市面上的销售自动化工具有很多&#xff0c;作为一般经验法则&#xff0c;以下是销售自动化工具中需要寻找…