【视觉与图像】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的数据格式
  • 尽量避免数组的复制操作

引用

目录
相关文章
|
11天前
|
机器学习/深度学习 人工智能 TensorFlow
人工智能浪潮下的自我修养:从Python编程入门到深度学习实践
【10月更文挑战第39天】本文旨在为初学者提供一条清晰的道路,从Python基础语法的掌握到深度学习领域的探索。我们将通过简明扼要的语言和实际代码示例,引导读者逐步构建起对人工智能技术的理解和应用能力。文章不仅涵盖Python编程的基础,还将深入探讨深度学习的核心概念、工具和实战技巧,帮助读者在AI的浪潮中找到自己的位置。
|
11天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
11天前
|
存储 Python
Python编程入门:打造你的第一个程序
【10月更文挑战第39天】在数字时代的浪潮中,掌握编程技能如同掌握了一门新时代的语言。本文将引导你步入Python编程的奇妙世界,从零基础出发,一步步构建你的第一个程序。我们将探索编程的基本概念,通过简单示例理解变量、数据类型和控制结构,最终实现一个简单的猜数字游戏。这不仅是一段代码的旅程,更是逻辑思维和问题解决能力的锻炼之旅。准备好了吗?让我们开始吧!
|
1天前
|
设计模式 缓存 开发者
Python中的装饰器:从入门到实践####
本文深入探讨了Python中强大的元编程工具——装饰器,它能够以简洁优雅的方式扩展函数或方法的功能。通过具体实例和逐步解析,文章不仅介绍了装饰器的基本原理、常见用法及高级应用,还揭示了其背后的设计理念与实现机制,旨在帮助读者从理论到实战全面掌握这一技术,提升代码的可读性、可维护性和复用性。 ####
|
8天前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
18 1
|
9天前
|
Python
SciPy 教程 之 Scipy 显著性检验 6
显著性检验是统计学中用于判断样本与总体假设间是否存在显著差异的方法。SciPy的scipy.stats模块提供了执行显著性检验的工具,如T检验,用于比较两组数据的均值是否来自同一分布。通过ttest_ind()函数,可以获取两样本的t统计量和p值,进而判断差异是否显著。示例代码展示了如何使用该函数进行T检验并输出结果。
13 1
|
11天前
|
设计模式 缓存 开发框架
Python中的装饰器:从入门到实践####
本文深入探讨了Python中装饰器的工作原理与应用,通过具体案例展示了如何利用装饰器增强函数功能、提高代码复用性和可读性。读者将学习到装饰器的基本概念、实现方法及其在实际项目开发中的实用技巧。 ####
22 3
|
11天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
20 1
|
7天前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
17 0
|
10天前
|
Python
SciPy 教程 之 Scipy 显著性检验 5
显著性检验用于判断样本与总体假设间的差异是否由随机变异引起,或是假设与真实情况不符所致。SciPy通过scipy.stats模块提供显著性检验功能,P值用于衡量数据接近极端程度,与alpha值对比以决定统计显著性。
16 0
下一篇
无影云桌面