白话文讲计算机视觉-第一讲-OPENCV图片及视频读写

2023-11-05 20:50

本文主要是介绍白话文讲计算机视觉-第一讲-OPENCV图片及视频读写,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是小木,没想到吧,我又回来了,啊哈哈哈。之前几天我肠胃感冒,所以我的博客就一直没有更新。但我小木是打不死的小强,这次继续回来讲解啦!

本次课程我主讲的内容是计算机视觉。为什么小木我要开这次课程呢?很简单,因为我之前读了一本书,叫做《OPENCV3 计算机视觉 PYTHON语言实现》。读了这本书,不知道是翻译没翻译好,还是国外的作者写的不好,读起来语句不通,知识概念模糊,稍有常识的人都会知道,这是人能读的懂的么,一本全tmd是术语,能不能好好说话?

本人最讨厌的是不好好说话的人,总说一些别人听不懂的之乎者也,显得自己像一个文化人,尤其是那些上了名校的本科,自以为了不起的人。我一般很喜欢用白话把他说的听起来很困难的东西变成简单的不行的,幼儿园小朋友都可以理解的东西,直接给他搞的下不了台。虽然本人的正直得罪的不少人,但是这并不影响本人在网络中进行知识的普及。

废话不多说,开始今天的内容:

首先我先说一下啥叫OPENCV,OPENCV是一个缩写,它的英文全称是Open source computer vision,也就是免费的计算机视觉资源。我来一个个地解释一下,OPEN也就是open source,这个意思是开放资源,也就是免费资源。我们中国学者一般有点东西都藏起来。而美国人不是这样的,他们是做出来什么,直接发到网上,毫无保留,为了就是告诉大家,我能!很单纯,很实在,我们一定要学习。Computer vision也就是CV,指的是计算机视觉,视觉我们最能联想到的是眼睛,那么计算机的眼睛是啥?它有眼睛?我的回答是有的,我们笔记本上面是不是都有一个摄像头?你坐在计算机的面前,它是不是能通过摄像的方式看到你呢?这个难道不是计算机的眼睛吗?所以计算机视觉也就是对计算机摄像头或者是已有的图片进行处理,让它能够辨识一些事物,比如我们上班打卡的人脸识别。

我们名字已经介绍完成了,既然科学家为我们提供了这么好的东西,那么我们是不是必须拿来研究一下,才能对得起他们的心血呢?那么我们就开始吧!

我们这次讲座使用的编程语言叫做PYTHON,这个语言的教程网上太多了,大家如果不太懂的话,随便找找教程看看就行了。

(1)我们先来一个基础,来说一下如何运用OPENCV,读取一张图片,并在屏幕上输出。

首先,我们导入两个库,一个是cv库,另外一个是numpy库。为啥要这两个库呢,第一个库是计算机视觉的类库,里面包含很多视觉算法。第二库是矩阵库,这个库里面包括很多用来计算矩阵的算法。

其次,我们要做的是用imread类读取图片文件到内存中,假如小木我读取的文件名字是opencv1-1.png图片样式为

接下来,我们要做的是把读取的图片在屏幕上显示,使用imshow类。

最后,我们设定一个参数,按键盘任意键,可以关闭图像。

代码如下所示:

#导入cv与numpy库import cv2import numpy#读入图片opencv1-1.png到变量img中img=cv2.imread('D:/小木/opencv1-1.png')#在屏幕上显示图片,图片窗口名称为dawawa,展示的图片为imgcv2.imshow('dawawa',img)#等待键盘按键cv2.waitKey()#关闭窗口并退出cv2.destroyAllWindows()

这样我们就在一个叫做dawawa的窗口下,显示了一张图片。但是我们有一点要注意,就是我们窗口名称一定要是英文,千万不要写中文,否则可能报错。

最后的结果如图所示:

如果大家对代码不是很熟悉的话,你们就直接拿过去用,把地址和窗口名一改就好了。(2)在我们讲完读入图片之后,接下来我们要讲解的是如何保存图片。

首先,创造一张图片,为了方便,我们就用按照上面的代码,导入的图片img。

其次,我们讲内存中的图片,保存到硬盘中,使用imwrite()类。

最后,我们设定一个参数,按键盘任意键,可以关闭图像。
代码如下所示:

#导入cv与numpy库import cv2import numpy#读入图片opencv1-1.png到变量img中img=cv2.imread('D:/小木/opencv1-1.png')#把img变量保存为图片dawawa.pngcv2.imwrite('D:/小木/dawawa.png',img)#等待键盘按键cv2.waitKey()#关闭窗口并退出cv2.destroyAllWindows()

我们的结果如图所示:

 

(3)这样,我们的图像就保存完毕了,我们再(1)、(2)上面拓展一下,如何能够打开一个图片,再把它转换为黑白图片,并在屏幕中显示,之后再保存起来呢?很简单,我们仅仅把imread类稍微改动一下就好啦。

#导入cv与numpy库import cv2import numpy#读入图片opencv1-1.png到变量img中###########修改之处##########################img=cv2.imread('D:/小木/opencv1-1.png',cv2.IMREAD_GRAYSCALE)###########修改之处###########################在屏幕上显示图片,图片窗口名称为dawawa,展示的图片为imgcv2.imshow('dawawa',img)#把img变量保存为图片dawawa.pngcv2.imwrite('D:/小木/dawawa1.png',img)#等待键盘按键cv2.waitKey()#关闭窗口并退出cv2.destroyAllWindows()

结果如图所示:

 

(4)图片的输入输出基础我已经讲完了,下面我要讲解的是如何进行视频的导入导出。首先我先讲解一下如何导入视频,并在屏幕中读取:

首先,我们导入两个库,一个是cv库,另外一个是numpy库。

其次,导入视频,应用VideoCapture类。

接着,我们获取视频每秒钟的帧数。

接下来VideoCapture类中的read()方法,读取一帧数据,我们用cv库自带的方法:cv2.CAP_PROP_FPS

接着,我们搞一个循环,首先在屏幕显示一下这帧图片,等待一段时间,一般是等待一帧的时间,计算方法是用1000/每秒帧数。然后接着读取下一帧数据。然后显示这帧,等待一帧的时间,然后读取下一帧。。。

最后,当所有的帧数都读取完毕了,我们设定一个参数,按键盘任意键,可以关闭图像。

代码如下所示:

#导入cv与numpy库import cv2import numpy#导入视频testvideo.mp4cameraCapture=cv2.VideoCapture('D:/小木/testvideo.mp4')#获取视频的帧数fps=cameraCapture.get(cv2.CAP_PROP_FPS)#读取视频的第一帧success,frame=cameraCapture.read()#按照顺序,循环读取视频中的每一帧,并显示到屏幕上while success:cv2.imshow('video',frame) #显示到屏幕上cv2.waitKey(int(1000/fps))success,frame=cameraCapture.read() #读取视频的第一帧#等待键盘按键cv2.waitKey()#关闭窗口并退出cv2.destroyAllWindows()

结果如图所示:

 

这样,我们的视频读取,并且播放就做完了。

(5)假如我们用OPENCV创造了一个视频,我们想把它保存到硬盘上,怎么做呢,其实很简单:

首先,我们制作视频,为了方便,我们就用(4)中读取的视频当作我们制作的视频。

然后,给视频确定一个帧数和尺寸(为了方便,就用视频自带的帧数和尺寸代替自己设定了)并且我们建立一个视频输出流,用cv库中的VideoWriter类。

其次,我们读这个视频的每一帧。

接下来,我们把每一帧写入到输出流当中进行保存。并循环读取每一帧,并写入输出流,直到所有帧都保存为止。

代码如下所示:

#导入cv与numpy库import cv2import numpy#导入视频testvideo.mp4cameraCapture=cv2.VideoCapture('D:/小木/testvideo.mp4')#获取视频的帧数fps=cameraCapture.get(cv2.CAP_PROP_FPS)#获取视频的尺寸size=(int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))#打开写入流videowriter=cv2.VideoWriter('D:/小木/save1.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)#读取视频的第一帧success,frame=cameraCapture.read()#按照顺序,循环读取视频中的每一帧,并输出到写入流中while success:videowriter.write(frame) #写入到硬盘success,frame=cameraCapture.read() #读取视频的第一帧#等待键盘按键cv2.waitKey()#关闭写入流videowriter.release()#关闭窗口并退出cv2.destroyAllWindows()

结果如图所示:

 

这样我们的视频读入写入就讲完了。我们这(5)讲完成之后,我们对OPENCV多少有了一点点的了解了。然而计算机视觉是视觉,摄像头实验应该是最重要的了,所以我们必须要使用摄像头,但是怎么使用呢,很简单,就改改我们的(4)~(5)代码就好啦。

(6)读取摄像头实验:

我们用VideoCapture(0)读取摄像头,在括号里,我们写上索引号就行,比如你有2个摄像头,第一个摄像头索引就是0,第二个就是1。

其它的都和上面一样,如果我们打开一个摄像头,并且在屏幕上显示摄像头的内容,然后把摄像头录制的东西保存,如果想关闭摄像头,按键盘任意按键即可。

代码这样写就行:

#导入cv与numpy库import cv2import numpy#导入摄像头cameraCapture=cv2.VideoCapture(0)#设定摄像头的帧数fps=30#设定摄像头的尺寸size=(int(cameraCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cameraCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))#打开写入流videowriter=cv2.VideoWriter('D:/小木/save1.avi',cv2.VideoWriter_fourcc('I','4','2','0'),fps,size)#读取视频的第一帧success,frame=cameraCapture.read()#按照顺序,循环读取视频中的每一帧,并显示到屏幕上、输出到写入流中while success and cv2.waitKey(1)== -1: #一直读取,并且按任意键结束cv2.imshow('video',frame) #显示到屏幕上cv2.waitKey(int(1000/fps))videowriter.write(frame) #写入到硬盘success,frame=cameraCapture.read() #读取视频的第一帧#等待键盘按键cv2.waitKey()#关闭写入流videowriter.release()#关闭摄像头cameraCapture.release()#关闭窗口并退出cv2.destroyAllWindows()

结果:

 

以上内容主要有:图片的读取,保存。视频的读取、保存。以及如何调用摄像头。然而不仅仅小木我喜欢编写这样的代码,好多人都编写了。美国一个天才编写了一个Cameo的类库,这里面包含我们所有的东西,而且还有不少新的功能,非常强大,我们只需要调用就可以。这个代码我们下节课讲解。

————————————————

如果对我的课程感兴趣的话,欢迎关注小木希望学园-微信公众号: 

mutianwei521

也可以扫描二维码哦!

这篇关于白话文讲计算机视觉-第一讲-OPENCV图片及视频读写的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352433

相关文章

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

C#读写文本文件的多种方式详解

《C#读写文本文件的多种方式详解》这篇文章主要为大家详细介绍了C#中各种常用的文件读写方式,包括文本文件,二进制文件、CSV文件、JSON文件等,有需要的小伙伴可以参考一下... 目录一、文本文件读写1. 使用 File 类的静态方法2. 使用 StreamReader 和 StreamWriter二、二进

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

MySQL主从复制与读写分离的用法解读

《MySQL主从复制与读写分离的用法解读》:本文主要介绍MySQL主从复制与读写分离的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、主从复制mysql主从复制原理实验案例二、读写分离实验案例安装并配置mycat 软件设置mycat读写分离验证mycat读

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模

Python如何将OpenCV摄像头视频流通过浏览器播放

《Python如何将OpenCV摄像头视频流通过浏览器播放》:本文主要介绍Python如何将OpenCV摄像头视频流通过浏览器播放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完... 目录方法1:使用Flask + MJPEG流实现代码使用方法优点缺点方法2:使用WebSocket传输视

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O