本文章以同步投稿到知乎和Bilibili,暂时没有视频教程(如果看的人很多的话可能会录一个),本教程永久免费!永久免费!不要VIP!弘扬互联网知识开源精神!也是因为怀着我之前在互联网学到的一大堆东西而对先行者开源知识的感恩,而为后来者添加一把属于我的柴薪和力量吧
本系列为超级适合新手入门的opencv教程
文章目录
- 本系列为超级适合新手入门的opencv教程
- 一切开始之前
- 什么是图片?
- 这张图片里面有什么?
- 长和宽
- 分辨率
- 颜色
- 视频
- 视频的组成
- 视频的检测
一切开始之前
OpenCV是什么?
这是个很重要的问题。对于OpenCV,它是个和视觉相关的包,什么是视觉?机器怎么来的视觉?别急,这一篇文章不会写出各样的代码,而是为各位解释,什么是视觉?图片是如何转换成我们能操作的数据?我们又该以什么样子的思想对待那些复杂的代码。这一篇的话会比较啰嗦(甚至是非常啰嗦),这也是为了比较彻底的为大家把一些很基础,不知道就无法学习的基础知识总结起来放在一起,不然的话把函数讲的再细致,我们也很难把那些零散的理论知识放在一起嘛,更别提更细致的进行应用了。
在此之间请检查:
您拥有一定的python知识,所以请回答以下的问题。
- Python的数组和元组有什么区别?
- 图片文件的后缀名有什么(知道一两个就行)
- 假设有一个数组[1,2,3,4,5],请问3这个元素的下标是多少?如果要取出1,3,5三个元素你该怎么办?
- Python的函数该如何定义?
- 在Python内有一个叫做Student的类,Student里面有一个叫做Name的函数。你该如何创建一个对象(实例)?创建对象之后你该如何使用Name函数?
- 假设在文件夹resource里面有一个叫做img的文件夹和一个叫做main.py的文件,在img文件夹里面有一张叫做tore.png的图片,那么main.py内,tore.png的相对路径是什么?
如果你能够回答出这些问题,不需要检查回答是否正确,只要有一个准确的概念,那么你就拥有了该教程的基础知识了
什么是图片?
这张图片里面有什么?
长和宽
对于这张图片而言,我们能看到什么?假设这张图片是印在一张纸上,我们拿出尺子,可以量出它的长以及它的宽。长和宽就是图片的最重要的因素之一。
那么长宽的数值是什么呢?大家玩过明日方舟、大侠立志传、植物大战僵尸等等的游戏吗?大家发现这类的游戏在玩的时候是有一个类似棋盘的地图,我们把这张棋盘掏空,在把棋盘上的每一个格子内放上颜色,这就是一张图片。这个棋盘的长多少个格子,宽多少个格子,这就是长宽。
分辨率
大家看视频的时候现在应该用的都是4K,1080p这样子吧。这个就是分辨率。分辨率就是我们能从这个图片或者视频上分辨的多清楚,或者说多详细。分辨率就是这个图片的长和宽符合哪一个级别,达到了就算是这个分辨率。
比如1080p就是1980x1020个像素。
我记得影视飓风发过关于分辨率的视频,大家可以去看看。
感慨一句,我在小时候看视频的时候看个480p都算是高清了~
颜色
除了长和宽,我们还看的出来,它还有颜色。在计算机上,任何一张图片的颜色可以分为三个部分:蓝、绿、红,请注意,计算机上的‘三原色’和绘画中的三原色‘红黄蓝’是不同的。至于为什么不同,我们要知道显示屏的显示原理。
大家应该都知道,计算机上一些的代码,无论是更贴近底层的C还是比较贴近现实语言的Python都无法直接在计算机上运行。我们需要把代码转换成二进制才能让计算机知道我们干什么。伟人说过:实事求是,我们不能让计算机运行不可能运行的程序。
假设一台计算机上没有声卡和音响,计算机就不可能发出声音。同样的,我们之所以用这个方法来表示颜色,就是因为在我们的显示屏上,每一个像素实际上都是由蓝绿红三个元素组成的。如果有看过一些科普视频的话,我们可以知道,在计算机之中所有的颜色我们使用一个有三个元素的元组表示的,元组的顺序为B,G,R(蓝、绿、红),这也是每个像素中的颜色顺序(注:有些显示器的显示顺序可能不同,但我们依旧在程序中使用BGR的顺序)。
假设我们把蓝色设定为255,再把绿色、红色设定为0。那么显示屏就会显示纯粹的蓝色。这个时候显示屏的蓝色发出蓝光,而红绿两色不发光(或者说是发出极其极其微弱的光,不过因为有些显示屏的时间太长导致的线路老化或者连接线之类的老化,所以有可能发出极其极其微弱的光,不过基本可以忽略不计,这是硬件问题,不过只要不明显变色显示器依旧是正常的,所以检测显示屏是否正常的话你可以在电脑上放一张纯色照片,例如纯白纯红这样,如果明显偏色则需要维修或检查是否是设置问题),所以显示了蓝色。
不过我们要知道,在199x年那个时代,中国不少人还在使用黑白电视,那我们是如何区分颜色的深浅的呢?我们看了上面我写的东西之后,颜色在那个年代又该如何看?
很简单,那个年代我们不使用颜色,我们使用的叫做灰度(明度),那种图片我们叫做灰度图。
我们把从纯黑到纯白的颜料放在颜料盘的两端,我们再把那一大堆的纯黑纯白颜料各分出256份。纯白的下一份我们拿出一份的黑色和255份的白色混在一起,在下一份我们拿出两份黑色和254份白色,最终是256份的黑色,那就是我们所分出来的灰度。
此时可能有人怀疑,说每个数字应该是0-255为什么要分出256份?实际上0也是数字,所以是1-255共255个数字以及0这一个数字,共计256个数字。
现在我们把这个调色盘拿到计算机上,我们把0设定为黑色,再把255设定为白色,一头一尾我们就能把每个图片的像素分开了,如果还是不太懂的话,大家可以去网络上搜索一下素描,素描用的铅笔用力划的话比较深,否则比较浅,没画就是纯白,全力画当成纯黑,用其它力道分开,道理有些类似。
下图是转换出来的灰度图,这个图片没有三个颜色的元组,只有一个灰度选项。抱歉托尔,还有龙女仆第三季什么时候才能出???抱歉托尔!!!!!!!!!!!!!!!!
视频
视频也是很重要的一点。如果你只是想学一些简单的opencv基础知识的话目前已经结束得勒~接下来是一些稍微进阶一点点的知识,不过也是opencv能用的一些东西。
视频的组成
大家小时候有没有看过翻页书,一本大概1块钱或者5毛钱,大概1cm厚,手指盖大小的那种。当我们快速的翻页的时候画面像是动起来的一样。
现在我们给这本书的每一页起一个名字:帧!
帧这个名字实际上不只是大家知道的意思。比如计算机网络之中就是数据链路层传输单位的名字,在这里还是把帧这个字给定义为一个视频中的一个部分。给大家讲一下帧这个字是怎么来的。
帧实际上不是外来的字。“帧”最早出现在唐代段成式的《寺塔记上》里“曼殊堂工塑极精妙,外壁有泥金帧”,帧在古代是画的画幅,不完全说这个画多大,而是指这个画的完整,带有多大的意思。所以说中国上一代的程序员也不是现在网上说的秃头或者男娘,也有很多很多的文人雅士。
为程序员正名🙌
视频的检测
我们在检测一个视频,实际上就是检测帧!我们把一个视频的帧切出来,当作一个图片进行检查,对于帧上面的关于图片的知识也是完全适用的。
在这里也把openCV中的关于视频检测的大致思想告诉大家,这也适用于任何需要导入视频修改视频的工作:1.导入这个视频或者开启摄像头;2.捕获每一帧;3.像是图片一样的检测。
好,到这里我们关于OpenCV的最最最最!!!基础的理论知识大家也就知道了,但大家记住,OpenCV的每一个函数的知识都不同,我尽我的最大努力来给大家解释,如果大家不急的话可以去看看线性代数课程,Numpy课程,这个OpenCV有很大关系的。
最后康纳镇楼