【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,一经查实,立即删除!

相关文章

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;通过关键字创建字典 >…

iOS UI基础-7.0 UIScrollView

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

Android之如何实现阿拉伯版本(RTL)的recycleView的网格布局

1 问题 比如正常的recycleView的网格布局效果如下 1 2 34 5 67 8 现在需要变成这样的效果 3 2 16 5 48 7 2 思考过程和尝试解决方法 1)从recycleView上直接分析,看有没有相关的方法变成这个格式,网上百度了,基本上找不到 2)既然recycleView里面有常见的几种布局设置,…

poj1189 简单dp

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