白话文讲计算机视觉-第一讲-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

相关文章

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

Python实现高效地读写大型文件

《Python实现高效地读写大型文件》Python如何读写的是大型文件,有没有什么方法来提高效率呢,这篇文章就来和大家聊聊如何在Python中高效地读写大型文件,需要的可以了解下... 目录一、逐行读取大型文件二、分块读取大型文件三、使用 mmap 模块进行内存映射文件操作(适用于大文件)四、使用 pand

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文

opencv实现像素统计的示例代码

《opencv实现像素统计的示例代码》本文介绍了OpenCV中统计图像像素信息的常用方法和函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 统计像素值的基本信息2. 统计像素值的直方图3. 统计像素值的总和4. 统计非零像素的数量

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11