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

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

10. 文件的读写

10.1 文本文件 操作文件三大类: ofstream:写操作ifstream:读操作fstream:读写操作 打开方式解释ios::in为了读文件而打开文件ios::out为了写文件而打开文件,如果当前文件存在则清空当前文件在写入ios::app追加方式写文件ios::trunc如果文件存在先删除,在创建ios::ate打开文件之后令读写位置移至文件尾端ios::binary二进制方式

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

opencv 滚动条

参数介绍:createTrackbar( trackbarname , "hello" , &alpha_slider ,alpha_max ,  on_trackbar )  ;在标签中显示的文字(提示滑动条的用途) TrackbarName创建的滑动条要放置窗体的名字 “hello”滑动条的取值范围从 0 到 alpha_max (最小值只能为 zero).滑动后的值存放在

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring MVC 图片上传

引入需要的包 <dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-