[python opencv 计算机视觉零基础到实战] 一 opencv的helloworld

前置条件

说明:本系列opencv实战教程将从基础到实战,若只是简单学习完python也可以通过该教程完成一般的机器学习编程;文中将会对很多python的基础内容进行讲解,但由于文章定位的原因将不会赘述过多的基础内容,基础内容进行第一次讲解后第二次将不会过多赘述,本文主要讲解的是opencv相关知识。

本文系统及环境:本文将在windows7操作系统下以python作为编程语言,完成对opencv的程序编写。python版本是3.8。

目录

[python opencv 计算机视觉零基础到实战] 一、opencv的helloworld

[【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld

[[python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑] 一、opencv的helloworld

[[python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解] 一、opencv的helloworld

[[python opencv 计算机视觉零基础到实战] 五、对象追踪] 一、opencv的helloworld

一、学习目标

  1. 安装opencv
  2. 了解什么是计算机视觉
  3. 了解读取图片的方法
  4. 了解显示图片的方法

二、完成opencv的helloworld程序编写

2.1 opencv是什么

要了解opencv是什么,首先可以看opencv的全程——Open Source Computer Vision Library,翻译过来为“开源的计算机系统识别库”。那计算机视觉指的是什么呢?

计算机视觉并不是指计算机可以去查看某些东西,这个说法太过片面,并不严谨;计算机视觉其实是研究如何让计算机去代替人去观察,并且进行一些目标上的处理。在opencv中,集成了很多方法,可以让我们开发者很容易的完成某些视觉上的操作,完成某些目标;通过opencv,可以让我们无需了解太多的算法知识,简便的进行开发。

2.2 opencv可以做什么

opencv应用广泛,例如人脸识别、车牌识别、机器人、指纹、文字等,还可以对图片信息进行方便的编辑,例如可以模糊图片、检测目标等;我们可以通过学习opencv可以做一个“检测老板面部自动切屏程序”、“类似于图片抠图等图片操作的软件”、“自动驾驶”等。

2.3 opencv的安装

opencv的安装很简单,使用pip命令安装即可。命令如下:

pip install opencv-python

安装完成后可以在cmd黑框框中进入python命令的交互界面,引入opencv即可知道是否已经安装成功。步骤如下:
首先输入python进入python命令的交互界面:

随后输入命令import cv2,引入OpenCV库:

若此时并未出错,则说明opencv安装正确。
其中import表示引入,import cv2表示引入cv2这个模块,cv2是模块名;其中import的作用是引入。

2.4 opencv的helloworld

opencv的helloworld程序跟一般的helloworld程序不同,指读取一张图片并且显示。我们打开自己的编辑器,我使用的编辑器是notepad。

opencv读取图片使用的是imread方法,在imread方法传入一张图片的路径即可读取到该图片,但需要注意的是,在读取图片时,路径不能出现中文、文件名最好是中文、在传入时还需要注意斜杆会转义,尽量的加r使文件路径不转义。查看以下示例:

img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')

以上代码读取一张路径为“C:\Users\mx\Desktop\1.jpg”的图片,并且赋值给img变量,这是img则为改图片对象。随后显示该变量内容需要先创建一个窗口,名为ImageShow,使用namedWindow方法。代码如下:

cv2.namedWindow("Image")

namedWindow接收2个参数,一个为窗口名称,另一个为显示方式;显示方式包括cv.WINDOW_AUTOSIZE与*cv.WINDOW_NORMAL,默认情况下是cv.WINDOW_AUTOSIZE;默认情况下并不能改变窗口大小,若图片太大,将会对查看造成一定的影响,使用cv.WINDOW_NORMAL则可以对窗口大小进行拖动更改,将会方便我们的查看。我们将以上代码更改,代码如下:

cv2.namedWindow("Image",cv.WINDOW_NORMAL)

接下来我们将显示图像,使用imshow方法。代码如下:

cv2.imshow("Image", img)

imshow方法接收2个参数,第一个是我们需要在哪个窗口显示的名称,第二个是读取后的图片对象img。若在上一步中不创建窗口Image,在使用imshow方法时依旧可以直接显示,此时将会创建一个当前所命名的窗口。接下来需要添加一个等待,防止程序运行完后自动关闭。代码如下:

cv2.waitKey (0)

接下来关掉窗口,调用destroyAllWindows方法,该方法将会销毁所有创建的窗口:

cv2.destroyAllWindows()

也可以使用destroyWindow方法销毁指定的窗口,如下代码:

cv2.destroyWindow("Image")

以上完整的代码如下:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#读取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#创建一个窗口
cv2.imshow("Image", img)#显示图像
cv2.waitKey (0)#等待关闭
cv2.destroyAllWindows()#destroy

运行代码,将会出现图片:

以上图片左上角为title头,是窗口名称,并且改图片可以拖动改变大小。我们更改imshow代码,使其指定到一个未创建的窗口进行显示:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#读取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#创建一个窗口
cv2.imshow("Image1", img)#显示图像
cv2.waitKey (0)#等待关闭
cv2.destroyAllWindows()#destroy

运行结果如下:

我们发现,这时创建了一个Image1窗口,该窗口显示了该图片内容,并且不能改动大小;我们使用namedWindow创建的Image窗口并没有指定显示内容,所以导致显示内容无,但是可以自动改变大小,这时因为我们创建该窗口时传入了cv2.WINDOW_NORMAL选择了可自由改变大小。这时可通过这个小例子很好的对比cv2.WINDOW_NORMAL与cv2.WINDOW_AUTOSIZE的区别。

这时也可以改变代码:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')#读取
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)#创建一个窗口
cv2.imshow("Image1", img)#显示图像
cv2.destroyWindow("Image")
cv2.waitKey (0)#等待关闭
cv2.destroyAllWindows()#destroy

以上代码中在waitKey 之前使用了destroyWindow方法对无用的Image窗口进行了销毁,运行时将会不再出现Image窗口。
注:文章首发于ebaina

三、总结

  1. 了解了安装opencv 的命令 pip install opencv-python
  2. 了解计算机视觉是研究如何让计算机去代替人去观察,并且进行一些目标上的处理
  3. 了解读取图片的方法imread
  4. 了解显示图片的方法imshow
  5. 了解窗口创建的多个模式WINDOW_NORMAL与WINDOW_AUTOSIZE
  6. 了解了销毁所有窗口的方法destroyAllWindows与销毁指定窗口的方法destroyWindow

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

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

相关文章

Android之用setColorFilter在ImageView上面覆盖一层灰色的图层

1 问题 在图片上面覆盖一层灰色的图层 2 解决办法 比如点击图片覆盖黑色 imageView.setColorFilter(ContextCompat.getColor(context, R.color.picture_color_black_80), PorterDuff.Mode.SRC_ATOP); 然后点击图片还原回来 imageView.setColorFilter(ContextCompat.getCol…

【计算机图形学】实验:VB.net环境下的综合绘图与交互技术案例教程

一、实验目的 掌握在.net环境下的绘图软件界面设计与交互技术。 二、实验准备 学习在.net环境下的界面设计的一般原理与交互技术等基本知识。 三、实验内容 将前7个实验内容集成到一个界面下,如直线段、圆、矩形与曲线的绘制填充,以及对图像的处理&…

IE8 兼容background-size的解决办法

.bgpic { background-image:url(); background-size:cover; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src,sizingMethodscale); } 注意progid里面的src路径是绝对路径或是相对于页面的路径。​ div class"bgpic"style"width:200px;height:1…

从头开始敲代码之《从BaseApplication/Activity开始》

转载请注明出处王亟亟的大牛之路 其安易持,其未兆易谋;其脆易泮,其微易散。为之于未有,治之于未乱。合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。为者败之…

查缺补漏系统学习 EF Core 6 - 原始 SQL 查询

推荐关注「码侠江湖」加星标,时刻不忘江湖事这是 EF Core 系列的第五篇文章,上一篇文章盘点了 EF Core 中的几种数据查询方式。但是有有时候,我们可能无法用标准的 LINQ 方法完成查询任务。或者编译后的 LINQ 查询,没有我们想要的…

【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取

一、学习目标 了解图片的结构属性了解如何捕获视频了解waitkey的使用方法 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld [[python opencv 计…

python冒泡排序代码完整_用Python写冒泡排序代码

python代码实现冒泡排序代码其实很简单,具体代码如下所示:代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> 1 def bubbleSort(numbers):for j in xrange(len(numbers),-1,-1):for i in xra…

[C++]VS2005(VC8) 使用 Boost

測試環境:[1] Widnows XP Professional[2] Visual Studio 2005 Team Studio(VC8.0)[3] WinCvs 1.31. 下載 Boost透過 CVS 下載最新版 cvs -d:pserver:anonymousboost.cvs.sourceforge.net:/cvsroot/boost login [詢問密碼時,直接輸入 Enter 略過] cvs …

Android之编译提示error: Apostrophe not preceded by

1 问题 as编译提示错误如下 error: Apostrophe not preceded by 2 原因 字符串资源文件里面value包含一个单引号 <string name"key">Don t ....</string> 2 解决办法 1) 加双引号 <string name"key">"Don t ...."</s…

【ArcObject开发】实验:ArcGIS Desktop开发方式入门基础教程

一、实验目的: 熟练掌握ArcGIS Desktop开发方式。 二、实验准备: 学习ArcGIS Desktop定制步骤;熟悉VBA编程环境、Active DLL和Active EXE开发一般过程。 三、实验内容: (1)描述在ArcGIS Desktop环境下定制窗体界面的一般步骤;(2)在VBA环境下编写宏,实现图层视图…

C# WPF后台动态添加控件(经典)

概述在Winform中从后台添加控件相对比较容易&#xff0c;但是在WPF中&#xff0c;我们知道界面是通过XAML编写的&#xff0c;如何把后台写好的控件动态添加到前台呢&#xff1f;本节举例介绍这个问题。这里要用到UniformGrid布局&#xff0c;UniformGrid 是一种横向的网格分割、…

Android Button监听的方式

Android Button的几种监听方式 1、一个Button对应一个监听 1&#xff09;xml文件中绑定监听 <Buttonandroid:id"id/btn_test"android:layout_width"match_parent"android:layout_height"wrap_content"android:text"test listener"a…

hdu 5441 (并查集)

题意&#xff1a;给你n个点&#xff0c;m条边构成无向图。q个询问&#xff0c;每次一个值&#xff0c;求有多少条路&#xff0c;路中的边权都小于这个值 a->b 和 b->a算两种 思路&#xff1a;把权值从小到大排序&#xff0c;询问从小到大排序&#xff0c;如果相连则用并查…

【Envi风暴】Envi 5.4遥感影像镶嵌原来如此简单!

图像镶嵌指是在一定的数学基础控制下,把多景相邻的遥感图像拼接成一个大范围、无缝图像的过程。 Envi的图像镶嵌功能提供交互式的方式将没有地理坐标或者地理坐标的多幅图像合并,生成一幅单一的合成图像。镶嵌功能提供了透明处理、匀色、羽化等功能。 下面演示基于地理坐标(…

[python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑

一、学习目标 了解图片的通道与数组结构了解使用numpy创建一个图片了解使用numpy对图片的一般操作方法 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的hel…

java 常用类库_JAVA(三)JAVA常用类库/JAVA IO

成鹏致远 |lcw.cnblog.com|2014-02-01JAVA常用类库1.StringBufferStringBuffer是使用缓冲区的&#xff0c;本身也是操作字符串的&#xff0c;但是与String类不同&#xff0c;String类的内容一旦声明之后则不可改变&#xff0c;改变的只是其内存地址的指向&#xff0c;而StringB…

Error: package or namespace load failed for ‘rJava’:

https://stackoverflow.com/questions/30738974/rjava-load-error-in-rstudio-r-after-upgrading-to-osx-yosemite 安装好的“xlsx”不能正常加载 library("xlsx") 报错&#xff1a; 载入需要的程辑包&#xff1a;rJava Error: package or namespace load failed for…

Android之国际化部分文字生效而部分文字没有生效的坑

1 问题 Android国际化我们知道只要在res目录下面&#xff0c;创建不同国家的文件夹然后&#xff0c;把不同国家对于的语言以键值对的方式写进strings.xml文件就行&#xff0c;这是一个非常简单的操作&#xff0c;但是今天遇到了一个很奇葩的问题&#xff0c;在部分手机&#x…

【中间件】c#/.net使用GZY.Quartz.MUI搭建可视化的定时任务面板

GZY.Quartz.MUI是在github上开源的aspnetcore项目, 它旨在帮助开发人员通过面板来设置定时任务&#xff0c;主要想做的就是:像swaggerUI一样,项目入侵量小,仅需要在Startup中注入的UI组件官方地址:https://www.cnblogs.com/GuZhenYin/p/15745002.html主要功能1.增加本地json持久…

Python学习笔记之字典

一、创建和使用字典 1、创建字典 phonebook{Alice:2341,Beth:9102,Cecil:3258} 2、dict,通过映射创建字典 >>> items[(name,Gumby),(age,34)] >>> ddict(items) >>> d 显示&#xff1a;{name:Gumby,age:34} dict&#xff0c;通过关键字创建字典 >…