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

一、学习目标

  1. 了解图片的结构属性
  2. 了解如何捕获视频
  3. 了解waitkey的使用方法

目录

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

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

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

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

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

二、了解opencv的图像属性

2.1 图像的属性

在我们获取到图像后,可以获取到图像的大小、类型以及通道等信息;通道指的是RGB这三个颜色通道,一幅完整的图像是由单独的红色图像、单独的绿色图像以及单独的蓝色图像组成;一幅图像若绿色通道没有,或者说关闭,它将会偏向其它两个颜色,同理,若其它颜色通道关闭后亦是如此。

我们可以操作这些通道信息,完成对图像的编辑。这三个通道的单独值范围都是0-255,显示方式如单独的红色则是(255,0,0),单独的绿色是(0,255,0)单独的蓝色则是(0,0,255),这些值对应一种数据类型uint8,表示取值范围就是0-255.

2.2 查看图像的宽高通道

那如何获取到图像的这些属性呢?在OpenCV中获取这些信息是十分简单的。首先我们可以使用shape获取图像的长宽以及通道个数。如下代码:

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.destroyWindow("Image")
cv2.imshow("Image", img)
print(img.shape)

以上代码中除了最后一行代码,其余都是上一节的内容,最后一行代码调用了读取到的img图片文件的shape属性。shape属性是img图片的长宽和通道,当使用该属性时将会得到长宽和通道属性。结果如下:

在显示的结果中可以看到,该值为1080、1620与3,其中长是1080,宽是1620,通道数是3。我们可以查看该图片属性得到值,对比是否一致。改图片信息如下:

2.3 查看图像的整体大小

得到信息后,我们还可以具体查看这个图片的具体大小。使用size属性可以获取到当前图片的具体大小值。

print(img.size)

在2.2示例代码末尾处添加以上代码。运行代码我们可以看到显示的内容如下:

我们可以发现,使用size查看大小后得到了5248800,这个数值是如何计算而来呢?我们可以通过计算器计算1080*1620的数值,当然得出的结果并不是5248800,因为我们还缺少一步,乘上3个通道值,因为我们的图片是需要有RGB三个通道的图片构成。最终通过计算机结果得出了大小的计算公式:长 * 宽 * 通道=size。

2.4 查看图像通道所占的位数

我们接下来可以查看一下每个通道占的位数。使用dtype属性可以查看每个通道数据的所占位数。

import cv2img = cv2.imread(r'C:\Users\mx\Desktop\1.jpg')
cv2.namedWindow("Image",cv2.WINDOW_NORMAL)
cv2.destroyWindow("Image")
cv2.imshow("Image", img)print(img.shape)
print(img.size)
print(img.dtype)

运行代码我们可以看到显示的内容如下:

在显示结果中的最后一行可以得知,所占的位数是uint8这个类型,这个类型所代表的一个数据范围就是0-255,以后若见到了该数据类型就可以很清楚的知道其中的数据的范围了,表示无符号的0-255这个范围的数据。

2.4 numpy

其实我们这个读取过来的img对象的数据类型是numpy的数据类型。numpy是一个做科学计算的数据计算包,通过numpy可以简单的去做很多运算。我们在读取这个图片时所存储的内容就是很多个0-255的数据组成的,这就是这个图片在这里最原始的样子。也可以说“这就是计算机所见到的图片的样子”,这句话并不严谨,但是有利于我们在这个层次去对这些图像数据做运算处理。

三、了解视频读取方法

3.1 了解视频与图片有什么关系

其实视频就是很多张图片而组成的,多张图片呈现流畅的视觉感受我们就可以叫做视频。越流畅,画面的视频更新率就越高,我们打游戏时有时候会说“卡成了ppt”,这个就是指视频更新率不够流畅,例如fps8,指每秒有8图片进行显示,fps 80则是表示有每秒有80张流畅的图片在你眼前飘过,但是你感受不出来;这种呈现出来流程的视觉效果让我们感受不出来是在看一张张的图片。

我们在使用pr进行视频剪辑的时候很容易感受到这种一张张图片,这种没一张张图片我们称为每一帧。如图:

我们每次左右移动一个帧那么就是一张图片,流程的图片就形成了视频动画。我们还有更为熟悉的在纸上画画,随后波动纸张就可以形成流程的动画效果。

其实我们可以从这个原理得到在之后课程中对视频中图像识别的启示。

3.2 了解捕捉视频的方法

要捕捉相机视频我们需要创建一个VideoCapture对象,VideoCapture方法可以选择相机,并且返回一个VideoCapture对象。代码如下:

captrue = cv2.VideoCapture(0)

在VideoCapture方法中,传入的参数为选择相机是哪一个,0代表第一个,若你有多个相机,则可以添加其他数字进行选择。创建相机后将返回一个值,该值可以使用isOpened方法判断相机是否打开,若没有打开则返回,你可以可以在里面添加提示信息:

if not capture.isOpened():exit()

我们可以逐帧的读取视频信息。编写一个while循环,使用capture的read方法。read方法将会返回2个结果,一个是是否正确读取时的布尔值,一个是帧图像:

while(True):ret,frame=capture.read()if not ret:break

以上代码中,ret是读取的正确与否,frame是帧图像。若ret不正确则会直接跳出循环。这时我们可以使用imshow函数对帧图形进行显示,并且由于循环每次都在同一个窗口中进行显示,这时将会刷新显示,代码如下:

cv2.imshow("vedio",frame)

由于我电脑跑不动,笔记本太老,需要添加个延时,并且延时设置为3秒,3000毫秒扥估3秒:

c=cv2.waitKey (3000)

为什么要等于c呢?这时因为我需要判断是否按下esc键进行退出。waitkey可以在一定时间内等待你按下键并且进行记录,esc键的值是27,所以代码为:

if c==27:break

整体代码为:

import cv2capture=cv2.VideoCapture(0)
if not capture.isOpened():exit()
while(True):ret,frame=capture.read()if not ret:breakcv2.imshow("vedio",frame)c=cv2.waitKey (3000)if c==27:break

这时可以运行代码查看效果,如果你电脑比我的更差,嗯。。。那就延时设置更高吧。运行效果如下:

本人比较害羞所以打码了,并且由于我设备有些问题,所以出现了点不一样的情况,正常情况会清晰的显示出结果的。
注:文章首发于ebaina

四、总结

  1. 了解图片的属性是有3个通道,分别为红绿蓝,并且可以通过shape获取到图片的宽高和三个通道
  2. 了解了如何计算图片的大小,是宽高乘积再乘3
  3. 了解了一张完整的图片是由3个单张的红绿蓝三通道图片组成
  4. 了解捕获视频需要创建VideoCapture对象
  5. 了解了选择设备在VideoCapture方法中传入参数进行选择
  6. 了解waitkey的可以等待并且接受输入的按键值

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

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

相关文章

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

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

【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是使用缓冲区的,本身也是操作字符串的,但是与String类不同,String类的内容一旦声明之后则不可改变,改变的只是其内存地址的指向,而StringB…

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

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

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

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

iOS UI基础-7.0 UIScrollView

概述 移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也相当有限.当展示的内容较多,超出一个屏幕时,用户可通过滚动手势来查看屏幕以外的内容,普通的UIView不具备滚动功能,不能显示过多的内容。UIScrollView是一个能…

【ArcGIS风暴】缓冲区分析、叠置分析综合实验案例:购房区域的选择

实验平台:ArcGIS 9.3实验目的:熟练掌握A rcGIS缓冲区分析和叠置分析操作,综合利用各项空间分析工具解决实际问题。实验要求:对每个条件进行缓冲区分析,运用空间叠置分析对多个图层叠加,并分等级,确定合适的区域。实验数据:ArcEx8实验步骤打开ArcMap,加载数据ArcEx8,如…

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

一、学习目标 了解什么是色彩空间了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld [[python opencv 计算机视觉零基…

java gui 按键 数组_java GUI分配数组值

好的,所以这是一个非常基本的例子.它需要更多的工作和优化,但应该让你朝着正确的方向前进import java.awt.Color;import java.awt.Dimension;import java.awt.EventQueue;import java.awt.Graphics;import java.awt.Graphics2D;import java.awt.Point;import java.awt.Shape;im…

poj1189 简单dp

http://poj.org/problem?id1189 Description 有一个三角形木板,竖直立放。上面钉着n(n1)/2颗钉子,还有(n1)个格子(当n5时如图1)。每颗钉子和周围的钉子的距离都等于d,每一个格子的宽度也都等于d,且除了最左端和最右端…

WPF|如何在 WPF 中设计漂亮的社交媒体信息仪表板

1. 效果展示先来直接欣赏效果:2. 准备创建一个WPF工程,比如站长使用 .NET 7[1] 创建名为 Dashboard3 的WPF项目,添加一些图片资源,项目目录如下:2.1 图片资源可在网站 iconfont[2] 下载 关闭、最小化 图标,…

CentOS 设置服务开机启动的方法

为什么80%的码农都做不了架构师?>>> CentOS设置服务开机启动的两种方法 1、利用 chkconfig 来配置启动级别 在CentOS或者RedHat其他系统下,如果是后面安装的服务,如httpd、mysqld、postfix等,安装后系统默认不会自动启…

【ArcGIS风暴】水文分析模块实验:山脊线和山谷线提取

实验平台:ArcGIS 9.3实验目的:学习和掌握山脊线和山谷线提取的原理及方法实验要求:利用ArcGIS水文分析模块提取样区的山脊线和山谷线实验数据:Ex1实验步骤:1.正负地形的提取 (1)打开Arcmap,加载数据EX1,如图 (2)平滑处理(均值滤波)。加载Spatial Analyst模块,单击…

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

一、学习目标 了解为什么色彩空间的转换那么重要了解opencv中进行对象跟踪的方法 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头读取] 一、opencv的helloworld [[python op…

【ArcGIS风暴】在ArcGIS中实现将一个圆16等分

本文实现在ArcGIS中画一个圆,然后将其16等分。 步骤一:生成圆(多边形图层) (1)创建一个点图层(图名Center),如果需要精确定位该点,建议通过输入坐标点的方式来创建,这一步比较简单,不再详述; (2)利用Buffer命令创建缓冲区(图名Circle_2km),因为要处理的对象…

[python opencv 计算机视觉零基础到实战] 六、图像运算

一、学习目标 了解opencv中图像运算的方法了解opencv中图像运算的运用 如有错误欢迎指出~ 二、了解OpenCV中图像运算的运用 目录 [python opencv 计算机视觉零基础到实战] 一、opencv的helloworld [【python opencv 计算机视觉零基础到实战】二、 opencv文件格式与摄像头…

【ArcGIS风暴】实验:公路建设成本的计算

实验平台:ArcGIS 9.3实验目的:学习和掌握公路建设成本的计算方法实验要求:熟练掌握如何生成通行成本层、计算成本距离,并学会计算最佳路径,且对成本距离与直线距离进行比较。实验数据:ArcEx7实验步骤:生成通行成本层1.打开Arcmap,加载数据ArcEX7,如图 2.执行spatial …

合并Spark社区代码的正确姿势

原创文章,转载请保留出处 最近刚刚忙完Spark 2.2.0的性能测试及Bug修复,社区又要发布2.1.2了,国庆期间刚好有空,过了一遍2.1.2的相关JIRA,发现有不少重要修复2.2.0也能用上,接下来需要将有用的PR合到我们内…

.NET 中 GC 的模式与风格

垃圾回收(GC)是托管语言必备的技术之一。GC 的性能是影响托管语言性能的关键。我们的 .NET 既能写桌面程序 (WINFROM , WPF) 又能写 web 程序 (ASP.NET CORE),甚至还能写移动端程序。。。不同使用场景的程序对 GC 的风格也有不同的要求&#…