【视觉与图像】Python+OpenCV教程入门篇

简介: 本教程翻译自OpenCV官方英文教程,按照使用度和难易度翻译,重新编写了大量原创内容,将不常用和较难的部分写成番外篇,浅显易懂,很easy的辣~每节的源码、图片和练习题答案均可在引用处找到

了解安装OpenCV-Python

1、简介

(了解安装OpenCV-Python)相信大部分人知道的OpenCV都是用C++来开发的,那为什么我推荐使用Python呢?

image.png

本教程翻译自OpenCV官方英文教程,按照使用度和难易度翻译,重新编写了大量原创内容,将不常用和较难的部分写成番外篇,浅显易懂,很easy的辣~每节的源码、图片和练习题答案均可在引用处找到噢

2、Python照样快!

众所周知,虽然Python语法简洁,编写高效,但相比C/C++运行慢很多。然而Python还有个重要的特性:它是一门胶水语言!Python可以很容易地扩展C/C++。OpenCV-Python就是用Python包装了C++的实现,背后实际就是C++的代码在跑,所以代码的运行速度跟原生C/C++速度一样快。

举两个简单的例子就一目了然了:一个是读入图片,另一个是调整图片的对比度和亮度:

image.png

image.png

可以看到某些情况下Python的运行速度甚至好于C++,代码行数也直接少一半多!另外,图像是矩阵数据,OpenCV-Python原生支持Numpy,相当于Python中的Matlab,为矩阵运算、科学计算提供了极大的便利性。

3、人工智能浪潮

近些年,人工智能相关技术的快速发展大家有目共睹,不必多说。在编程语言方面,更多人希望的是具备高效开发效率、跨平台、高度扩展性的语言,尤其是一些AI巨头优先推出支持Python语言的深度学习框架,如Facebook的PyTorch、Google的Tensorflow等,可以说Python是名副其实的“网红语言”了。

image.png

从TIOBE编程语言排行榜也可以看到,Python发展迅猛,已经逼近C++的份额。这个排行榜每月更新,我就不截图了,编写时TOP5:Java/C/C++/Python/C#。

4、人生苦短,我用Python

如果你搞科研用,果断放弃C++(Matlab?出门左拐)

如果你是快速原型开发,验证方案,果断放弃C++

如果你懒的配置OpenCV环境,果断放弃C++

如果你的程序是在支持Python的较高硬件环境下运行,果断放弃C++

如果你担心Python写不了界面,那是你的问题o_o ….

除非你的程序是MFC或已经用C++编写其他模块或是嵌入式设备,那就用C++吧

“人生苦短,我用Python!!!”

5、安装

本教程编写时使用的软件版本是:OpenCV 3.x,Python 3.x。

要安装OpenCV,只需cmd下的一条指令:

pip install opencv-python

pip是Python的包管理器,如果你还没安装Python,强烈推荐安装Anaconda,它包含了大量的科学计算包,不用后期一个个安装。即使你已经装了Python也没有影响,Anaconda相当于虚拟环境,互不干扰。

安装步骤
进入Anaconda官网,下载最新版本的安装文件,速度比较慢的话,可以去清华开源镜像站。

Windows版下载的是exe文件,双击可以直接安装,安装时记得勾选 Add Anaconda to my PATH environment variable,添加到环境变量中。

Linux版下载的是sh文件,下载完成后,终端切换到下载目录,执行bash Anaconda3-xx.sh,Linux版也会提示添加环境变量,记得输yes就行。

6、安装测试

Python安装好之后,可以在cmd中输入python --version来查看Python的版本信息。对于OpenCV,打开Python的开发环境,输入import cv2,运行没有报错说明一切正常。要查看OpenCV的版本,可以:

print(cv2.__version__) # '3.4.1'

Python开发环境我用的是Visual Studio Code,也可以用PyCharm/Atom/Jupyter Notebook(Anaconda自带),或者直接在命令行里敲,自己习惯就行。

7、常见问题

pip识别不了:环境变量中没有pip的目录,找到pip目录,添加到用户(或系统)变量的path中。

下载速度很慢:可到此处下载离线版。下载完成后,cmd切换到下载目录,输入 pip install 文件名 安装。

8、学习软件

为了便于学习OpenCV,我写了一个教学款软件LearnOpenCVEdu,目前只开发了一部分功能,有兴趣的童鞋可以支持一下噢

image.png

引用

本节源码 http://t.cn/EqNCWbb

网络资料
OpenCV Docs官方文档 https://docs.opencv.org/

OpenCV 官方Github https://github.com/opencv/opencv

官方英文教程:OpenCV-Python Tutorials http://t.cn/R5nr2Ip

LearnOpenCV、LearnOpenCV Github http://t.cn/Rfr0E5c

Numpy Quickstart Tutorial https://docs.scipy.org/doc/

OpenCV 中文教程 http://t.cn/zOvAjYG

书籍
Programming Computer Vision with Python、中文书

https://www.pyimagesearch.com/practical-python-opencv/

名校视觉研究所/课程
卡内基梅隆大学

多伦多大学

番外篇1:代码性能优化

学习如何评估和优化代码性能。

完成一项任务很重要,高效地完成更重要。图像处理是对矩阵的操作,数据量巨大。如果代码写的不好,性能差距将很大,所以这节我们来了解下如何评估和提升代码性能。

1、评估代码运行时间

image.png

这段代码就是用来测量程序运行时间的(单位:s),其中cv2.getTickCount()函数得到电脑启动以来的时钟周期数,cv2.getTickFrequency()返回你电脑的主频,前后相减再除以主频就是你代码的运行时间(这样解释并不完全准确,但能理解就行)。另外,也可以用Python中的time模块计时:

image.png

经验之谈:如果你使用的是IPython或Jupyter Notebook开发环境,性能分析将会非常方便,详情请参考:Timing and Profiling in IPython

2、优化原则

数据元素少时用Python语法,数据元素多时用Numpy

image.png

所以Numpy的运行速度并不一定比Python本身语法快,元素数量较少时,请用Python本身格式。

  • 尽量避免使用循环,尤其嵌套循环,因为极其慢!!!
  • 优先使用OpenCV/Numpy中封装好的函数
  • 尽量将数据向量化,变成Numpy的数据格式
  • 尽量避免数组的复制操作

引用

目录
打赏
0
1
1
0
128
分享
相关文章
用 Python 制作简单小游戏教程:手把手教你开发猜数字游戏
本教程详细讲解了用Python实现经典猜数字游戏的完整流程,涵盖从基础规则到高级功能的全方位开发。内容包括游戏逻辑设计、输入验证与错误处理、猜测次数统计、难度选择、彩色输出等核心功能,并提供完整代码示例。同时,介绍了开发环境搭建及调试方法,帮助初学者快速上手。最后还提出了图形界面、网络对战、成就系统等扩展方向,鼓励读者自主创新,打造个性化游戏版本。适合Python入门者实践与进阶学习。
81 1
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
Jupyter MCP服务器基于模型上下文协议(MCP),实现大型语言模型与Jupyter环境的无缝集成。它通过标准化接口,让AI模型安全访问和操作Jupyter核心组件,如内核、文件系统和终端。本文深入解析其技术架构、功能特性及部署方法。MCP服务器解决了传统AI模型缺乏实时上下文感知的问题,支持代码执行、变量状态获取、文件管理等功能,提升编程效率。同时,严格的权限控制确保了安全性。作为智能化交互工具,Jupyter MCP为动态计算环境与AI模型之间搭建了高效桥梁。
144 2
Jupyter MCP服务器部署实战:AI模型与Python环境无缝集成教程
|
3月前
|
Python教程:os 与 sys 模块详细用法
os 模块用于与操作系统交互,主要涉及夹操作、路径操作和其他操作。例如,`os.rename()` 重命名文件,`os.mkdir()` 创建文件夹,`os.path.abspath()` 获取文件绝对路径等。sys 模块则用于与 Python 解释器交互,常用功能如 `sys.path` 查看模块搜索路径,`sys.platform` 检测操作系统等。这些模块提供了丰富的工具,便于开发中处理系统和文件相关任务。
114 14
Python 原生爬虫教程:京东商品列表页面数据API
京东商品列表API是电商大数据分析的重要工具,支持开发者、商家和研究人员获取京东平台商品数据。通过关键词搜索、分类筛选、价格区间等条件,可返回多维度商品信息(如名称、价格、销量等),适用于市场调研与推荐系统开发。本文介绍其功能并提供Python请求示例。接口采用HTTP GET/POST方式,支持分页、排序等功能,满足多样化数据需求。
Python 原生爬虫教程:京东商品详情页面数据API
本文介绍京东商品详情API在电商领域的应用价值及功能。该API通过商品ID获取详细信息,如基本信息、价格、库存、描述和用户评价等,支持HTTP请求(GET/POST),返回JSON或XML格式数据。对于商家优化策略、开发者构建应用(如比价网站)以及消费者快速了解商品均有重要意义。研究此API有助于推动电商业务创新与发展。
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
441 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
231 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow
眼疾识别系统,使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对眼疾图片4种数据集进行训练('白内障', '糖尿病性视网膜病变', '青光眼', '正常'),最终得到一个识别精确度较高的模型。然后使用Django框架开发Web网页端可视化操作界面,实现用户上传一张眼疾图片识别其名称。
214 9
【眼疾病识别】图像识别+深度学习技术+人工智能+卷积神经网络算法+计算机课设+Python+TensorFlow

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问