版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章计算机视觉概述前言长久以来,人类都在研究如何使机器能够“看见”,即具图像处理、图像构建、图像理解等能力。通过对人类视觉系统的研究,科学家在很早以前就发现了眼睛“看见”的原理,随后照相机、摄像机、具有目标识别能力的机器人、能够理解图像含义的搜索器等视觉系统陆续出现在了人们的生活中。那么,人类视觉到底有哪些奥秘呢?到底什么是计算机视觉呢?机器是如何处理图像的?这一系列问题将在本章得到回答。任务总结了解图像处理库学习什么是图像处理学习什么是计算机视觉学习什么是计算机视觉What
is
computer
vision1.1人类视觉1.3计算机视觉的应用1.2计算机视觉011.1
起源:人类视觉
人类视觉原理人类视觉特性人类视觉原理主要由视觉器官和大脑视觉皮层组成视觉器官指的的是“眼睛”主要由角膜、虹膜、晶状体、视网膜组成
。原理光线进入人眼,穿过晶状体后在视网膜上成像,分布于视网膜上的视觉细胞将光转换成电脉冲,传递给大脑视觉皮层进行解码产生图像人类视觉特性视觉关注机制注意力机制色彩敏感度RGB转灰度图亮度及对比敏感度边缘检测视觉掩盖视觉内在推导机制1)视觉关注机制定义:在纷繁复杂的外界场景中,人类视觉总能快速定位自己感兴趣的目标,而忽略不重要的区域。模式:自底向上模式和自顶向下模式自底向上模式是由图像客观内容驱动,主要跟图像内容的显著性相关。自顶向下模式则主要由主观命令指导,受到人类意识支配,在人类意识指令下强行转移注意力到某一特定区域。在计算机视觉领域,基于人类视觉关注机制提出的注意力机制是解决信息超载问题的主要手段。自家的假装没看见这幅图里有只小猫咪,找找看?2)色彩敏感度人类视觉系统并不是对每种颜色都同样敏感。视网膜上有一类锥状细胞,它们对红光,绿光和蓝光的敏感度不尽相同,同时,这些细胞的占比也不均匀。这一特性影响到RGB彩色图转灰度图的权重设置,为红色通道0.299、绿色通道0.587、蓝色通道0.114。3)亮度和对比度度敏感机制人眼对光强度具有某种自适应的调节功能,即能通过调节感光灵敏度来适应范围很广的亮度,同时这也导致了人眼对绝对亮度的判断能力较差。如图中所示,中间同等亮度的方块在黑暗的背景上会显得更亮,反之,会显得更暗。同理,相较于小幅度亮度变化,人眼对大跨度的亮度变化,比如物体边缘区域,更敏感。边缘信息在计算机视觉领域得到了广泛应用,如通过对边缘特征的检测,识别目标的类别、获取目标的位置,跟踪目标的移动路径等。4)视觉掩盖效应类别:对比度掩盖起因:视觉信息间的相互作用或相互干扰将引起现象举例:亮度和颜色如何影响到你的视觉?请问:这两条螺旋带是同一种颜色吗?4)视觉掩盖效应类别:纹理掩盖起因:人眼能够毫无察觉地过滤掉一定阈值以下的信息,对像素层绝对差值大的关注度更高。特点:这一特性在实际图像处理中帮助我们区分出哪些信号是视觉系统能察觉、感兴趣的,哪些信号是视觉系统无法察觉、可忽略的。选择性地处理人眼能够察觉的信息可以大大减少图像处理的复杂度,且在一定条件下改善图像的显示质量。案例:图像编码压缩过程,
pdf文件压缩(利用人类视觉系统对高频的不敏感特性,舍弃部分高频信息)不断添加频率个数,图像恢复情况4)视觉掩盖效应类别:运动掩盖起因:人眼容易首先关注视频中运动速度中等或快的图像内容,而易忽略运动速度慢或静止的图像内容。特点:受运动掩盖效应的影响,人眼很难观察到图像内容的细节信息,因此其对应的感知敏感程度会显著降低。而运动速度中等的图像内容不仅易吸引人眼关注,并且运动掩盖效应的作用微弱,所以其对应的感知敏感程度最高。案例:视频压缩-减少时间冗余5)视觉内在推导机制根据大脑中的记忆信息,来推导、预测输入的视觉内容,同时选择性地丢掉那些无法理解的不确定的信息。如图中所示,这两佛图都是具有歧义的图片,当我们根据经验判断其为其中一种对象,如判断为杯子,那么我们就会有意识的丢掉与杯子无关的信息。这种推导机制由视觉大脑皮层来处理,对应到计算机视觉系统中,则由主机进行处理。这种判断和推导的能力衍生出了计算机视觉应用中的各种任务,如图像识别,图像生成,目标检测,目标跟踪等。图像识别图像生成目标跟踪目标检测杯子or人脸?回忆回忆问题一:彩色图转灰度图,红色通道、绿色通道和蓝色通道的权重一样吗?为什么?
问题二:人工智能领域的注意力机制是参考了人眼系统的哪种特性?第1章计算机视觉概述复习5分钟分享1.2计算机视觉
计算机视觉定义计算机视觉的任务计算机视觉应用计算机视觉的定义计算机视觉是一门研究如何使机器“看”的科学,其目标是在机器上复现人类视觉。更具体的说,就是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等视觉任务。计算机视觉的输入是图像,输出是场景知识,如图像中的物体类别、物体数量、物体运动等。由于语义鸿沟的原因,要实现“看”的能力似乎没有那么容易。计算机视觉:试图在机器上复现人类视觉,但由于语义鸿沟的原因,似乎没有那么容易。语义鸿沟:指通常人们在判别图像的相似性时并非建立在图像低层视觉特征的相似上,而是建立在对图像所描述的对象或事件的语义理解的基础上。语义鸿沟这两幅图一样吗?这是什么动物?人类:完全不同,计算机:很相似人类:是猫,计算机:是梅花鹿
从任务内容上划分,计算机视觉的基本任务可分为:分类,定位,检测和分割计算机视觉任务分割(segment):在检测的基础上进一步判断图像中哪些像素属于哪个目标。分类(classification):判断一张图像所属类别。定位(localization):判断目标在图像的位置,通常是以包围盒的(boundingbox)形式呈现。检测(detection):判断图像中出现的可检测目标的种类和数目,并框出每个目标的包围盒。计算机视觉基本任务图像理解图像跟踪图像识别根据场景知识的不同,计算机视觉可以划分为图像识别、图像跟踪和图像理解。计算机视觉任务(1)图像识别一种利用计算机识别图像中各种不同模式的目标和对象的技术,在机器学习领域,主要指对于一个给定的图像,预测它属于的哪个分类标签。粗粒度图像识别和细粒度图像识别主要任务为图像分类,应用:搜索引擎、智能相册等
图像识别的影响因素:姿态、视角、光照、遮挡、背景干扰等
图像识别结论:计算机视觉较于人类视觉还有一段不小的距离。计算机视觉任务(2)图像跟踪通过图像识别、红外、超声波等方式对摄像头中拍摄到的物体进行定位和追踪。在计算机视觉层面,图像跟踪可以细分为目标检测和目标跟踪遮挡、形变、背景斑杂、尺度变化等,会影响到跟踪效果应用:无人机跟踪,体育赛事跟踪计算机视觉任务(3)图像理解图像理解主要指对图像语义的理解,是在简单识别基础上进一步提取深层含义的技术。对于同一张图片,图像识别能识别出属于分类集合内的目标,而图像理解能识别出更多的信息,比如图像中有什么目标、目标之间有什么关系、图像处于什么场景以及如何应用场景等。提取图像到深层含义应用:实例分割,图像描述,视频描述,唇语解读,图像生成等。计算机视觉应用工业医疗交通应用电商支付说一说:在聊天室分享让你眼前一亮的计算机视觉应用案例?
第1章计算机视觉概述2.1图像的表示(1)二值图像(2)灰度图像(3)彩度图像计算机视觉处理的图像经过数字摄像机、扫描仪等设备的采样后,需要以某种数字化方式进行表示才能进行后续的处理。那么图像在计算机中是如何表示的呢?图像表示
图像表示二值图像是指像素值只有0和1的图像表示方法,使用1个比特位即可表示。占用更少的存储空间,获得更高效的处理速度。二值图可以很方便的进行逻辑运算,常用于标识图像区域,与图像做点乘运算,能够快速分割出目标区域。1)二值图像0001000010000011111111000011111111000011011011000011111111000011110111000011101011000001111110000000011100000000001000000011111111100000111110002)灰度图像
灰度图,又称灰阶图,是用灰度表示的图形。灰度是一种像素强度分级机制,将白色与黑色之间按对数关系分为多个等级,通常使用8位表示,取值范围为0~256灰度图像与二值图像不同,二值图像的每个像素使用1个比特位表示,灰度图像使用8个比特位表示;二值图像只有黑色与白色两种颜色,灰度图像在黑色与白色之间还有许多不同等级的中间色。0-2558位整数3)彩色图像
彩色图像通常由多个叠加的彩色通道组成,每个通道代表给定颜色分量的强度值。典型的3通道彩色图像由红色、绿色、蓝色叠加而成,3通道彩色图像分解示意图如图1.5所示。图中左边是一张自然染色的图像,右边分别显示的是红色、绿色和蓝色3个颜色分量的通道。思考?右边的图是什么类型的图片?A二值图B单通道灰度图C多通道彩色图第1章计算机视觉概述2.2
色彩模型色彩模型是描述如何使用1组值表示颜色的方法的抽象数学模型。目前经常用到的色彩模型有RGB、HSV、CMYK、Lab等。而OpenCV支持的多通道色彩模型主要有RGB、HSV等。1)基于发光屏幕的RGB
OpenCV中BGR图像数据表示
2)基于直观感受的HSVHSV像素点同样由3个分量表示,H(Hue)分量表示色相,S(Saturation)分量表示饱和度,V(Value)分量表示明度H分量用角度度量,取值范围为0~360,表示光谱上的颜色值S分量表示颜色的饱和程度,取值范围为0~100V分量表示明亮程度,取值范围同样为0~100,V值越高,表示颜色明亮度越高如果要表示黄色,在HSV空间中,只需要将H分量设置为60即可相比RGB,HSV颜色空间更容易实现对颜色的跟踪,在图像处理领域常用于分割指定颜色的物体。3)用于打印的CMYK
利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”四种标准颜色是:C=青色,M=品红色,Y=黄色,K=黑色。CMYK色彩空间专用于印刷领域,通常在印刷品上看到的图像都是CMYK模式,比如期刊、杂志、报纸、宣传画等,而在屏幕上显示的图像都是RGB模式。4)基于生理的LAB
思考?电脑屏幕上的画面是哪种色彩模式?A
CMYKB
RGBC
HSVD
LAB纸质教材上的图文是哪种色彩模式?A
CMYKB
RGBC
HSVD
LAB第1章计算机视觉概述2.3图像处理的基本过程
计算机视觉系统的图像处理过程一般包括图像获取、图像预处理、特征提取、高级处理等基本过程数字图像的获取主要通过图像感知设备,如各种光敏摄像机、雷达、超声波接收器等
必要的预处理操作被采用以使图像满足后继分析的要求。常用的预处理操作有图像去噪、图像增强、图像转换、二次取样等
特征提取指从图像中提取对后继分析有用的图像特征。简单的特征提取操作有边缘提取、边角检测、斑点检测等,相对复杂的特征可能与图像中的纹理形状或运动状态有关,有时还需要进行图像分割,从一或多幅图片中分割出含有特定目标的区域高阶处理部分,主要任务是理解图像的含义
。高级处理的内容包括但不限于:验证得到的数据是否符合前提要求、估测特定系数(如目标的姿态和体积)、对目标进行分类等。图像获取-图像采集图像感知设备,如各种光敏摄像机、雷达、超声波接收器等。使用的感知器不同,采集的图像也会有区别。46普通相机、摄像机彩色图像,像素点对应的是光在不同光谱段上的叠加强度事件摄像机由像素位置、时间和极值组成的事件对象数列雷达灰度图像,像素点对应的是无线电波的电平超声仪灰度图像,像素值为超声波的回波信号差图像获取-图像表示采集设备能够返回数字图像,是因为中间经历了图像数字化过程47
灰度离散化:将连续变化的像素取值转化成有限个离散值,赋予像素点以灰度划分的亮度值。通常为8位或16位整数。压缩编码:一般的压缩方式有预测编码、变换编码、分形编码、小波变换图像压缩编码等。常见压缩格式有JPEG、PNG等。Cat.jpgdog.png2.bmp图像采集图像量化压缩编码图像文件直接从图像感知设备获取的图像可能存在噪声、暗区、倒置、尺寸不统一、数量不足等问题,无法直接用于分析任务,需要进行预处理操作。预处理类别描述图像转换转换为灰度图或二值图像,图像归一化处理,图像标准化处理等。图像增广通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。处理内容包括翻转、裁剪、过滤、锐化、模糊、旋转、平移、剪切、缩放、色彩、亮度、对比、均匀、加噪、渐变、变形等。图像预处理思考?5.图像采集是图像的空间离散化过程,而图像量化是灰度离散化过程。A对B错第1章计算机视觉概述复习5.图像采集是图像的空间离散化过程,而图像量化是灰度离散化过程。A对B错复习五分钟分享名单了解图像处理库Knowledgeofimageprocessinglibraries3.1
Numpy数组创建数组重塑广播3.1
Pillow图像读取图像转换色彩分离和合并03PART常见图像处理工具库
在实际处理中,可以采用工具软件提升预处理效率。在Python环境中,常用的与图像运算和处理相关的库有NumPy、SciPy、Pillow、Matplotlib、OpenCV等,3.1
NumPy数组创建图像转换广播NumPy是Python语言的一个扩展程序库,支持大量的维度数组与矩阵运算,非常适合用于数字图像的矩阵运算。实验报告提交实验报告命名案例:1.NumPy的基本使用(姓名-学号)提交:当天统一完成提交实验报告:代码部分,直接粘贴代码,不要有截图结果部分:直接将执行结果截图数组创建通过函数array()构建numpy.array(object,dtype=None,order='C’)式中,object是数组或嵌套的数列,dtype是数组元素的数据类型,order参数是索引数组的顺序,C为行方向,F为列方向,A为任意方向(默认)。【案例】创建一个矩阵A的语句为:importnumpy
A=numpy.array([[1,2],[3,4]],int)
数组创建empty()、zeros()、ones()Empty()用于创建一个未初始化的数组zeros()用于创建全0的数组;ones()用于创建全1的数组zeros()的语法格式为:numpy.zeros(shape,dtype=float,order='C’)
ones()语法格式为:numpy.ones(shape,dtype=np.uint8,order='C’)
式中,shape是数组形状,dtype是数组元素类型,order参数是数组的样式。【案例】创建一个全0的矩阵B语句为:B=numpy.ones((3,2),int)
语句执行结果为:B:[[1
1][1
1][1
1]]
数组创建shape、ndim、size、dtype通过ndarray对象的ndim属性能够获得数组的秩,NumPy数组的维数称为秩,一维数组的秩为1,二维数组的秩为2,以此类推;通过shape属性能够获得数组的形状信息数组的形状表示为一个元组,其中的元素为各个维中元素的数量。除此以外,还有size、dtype等属性。【案例】数组创建,创建一个矩阵A([1,2][3,4]),并打印A的形状、秩、尺寸和类型。
importnumpyasnp
A=np.array([[1,2],[3,4]],int)
print(A.shape)
print(A.ndim)
print(A.size)
print(A.dtype)
小练习(10分钟)完成实验指导书1的练习1和2,并完成实验报告中相应部分内容。2)数组重塑
数组创建完成后,还可以通过reshape()改变数组形状,前提目标数组的元素总量不变arr.reshape(newshape,order='C')式中,arr是待改变的数组,newshape是目标形状,order是索引素组顺序。
将形状为(3,2)数组B转变为形状为(2,3)的语句为:B.reshape((2,3),order='C’)
完成实验指导书练习3,(5分钟)3)广播
NumPy的“广播”特性让不同形状的数组之间的也能进行运算NumPy中,当两个数组的后缘维度(从末尾开始算起的维度)的轴长相等,或是有一方的维度是1,仍然可以借助“广播”的形式进行计算3)广播
【例1.1】计算出数组A:[[1,2],[3,4],[5,6]]与数组B:[[1,2]]进行四则运算的结果,并编码验证。编写验证代码如下:importnumpyasnp
A=np.array([[1,2],[3,4],[5,6]],int)
B=np.array([1,2])
print("A+B=",A+B)
print("A-B=",A-B)
print("AxB=",A*B)
print("A/B=",A/B)
完成实验指导书练习4,(10分钟)Numpy基本使用【拓展案例】1.使用NumPy创建形状为100*100,类型为uint8的矩阵,矩阵的前10行元素值为0,后续10行为255,再后续10行为0,以此类推,并使用Pillow显示该矩阵,看看效果是怎么样。
importnumpyasnp
fromPILimportImage
A=np.zeros((100,100),np.uint8)
foriinrange(11,100,20):
A[i:i+9,]=255
im=Image.fromarray(A)
im.show("result")完成实验指导书练习5,(5分钟)下一次分享主题第1章计算机视觉概述复习【多选题】以下用于构建数组的函数有?A
array().Breshape().Czeros().D.ones()【单选题】以下用于重塑数组的函数是?A
empty().Breshape().Czeros().D.ones()【判断题】形状为(2,3,3)和(1,3,3)的numpy数组可以进行加减乘除运算。A对B错分享时间3.2
Pillow图像读取图像转换色彩分离和合并Pillow是python3的图像处理库,提供了基本的图像处理功能,如读写图像、几何变换、颜色变换等。前面介绍了图像的不同表示方式、色彩空间等概念1)图像读取核心:Imageopen()函数读取图像,通过_show()函数显示图像读取到图像对象后,通过mode、size、height、width等属性获取图像的色彩空间、尺寸、高度和宽度。conda
install
pillowpip
install
pillow
【例1.2】读取图片lena.jpg,获取图像的色彩空间、尺寸、高度和宽度信息。1)图像读取_show()类显示函数,使用:Image._show(im)show():对象显示函数,使用:im.show(name)Numpy到Image:Im=Image.fromarray(arr)注意:Image图像对象的组织形式为(H,W,C)与tensorflow一致【例1.2】使用NumPy创建形状为(100,100,3)的矩阵,并使用Pillow显示该矩阵1)图像读取类型转换:Image
to
Numpynp_im=numpy.array(pil_im)np_im是转换成的NumPy数组,pil_im是Pillow的图像对象。NumPy的二维数组(矩阵)也可以通过Pillow显示为图像,所用函数为fromarray()
【例1.3】读取图像cat.jpg,转换为numpy类型,并且打印数组的形状和类型。1)图像读取【例1.3】读取图像cat.jpg,转换为numpy类型,进行运算后转换为Image并显示。第1章计算机视觉概述3.2
Pillow图像读取图像转换色彩分离和合并Pillow是python3的图像处理库,提供了基本的图像处理功能,如读写图像、几何变换、颜色变换等。前面介绍了图像的不同表示方式、色彩空间等概念2)图像转换convert()函数支持灰度图和彩色图之间的模式转换im.convert(mode)im是图像对象,mode是转换的目标模式,取值“L”表示转换为灰度图,取值“RGB”表示转换为彩色图像【例1.4】读取图片cat.jpg,将其转换为灰度图完成实验报告实验5(5分钟)2)图像转换二值图像的函数im.point(func)首先设置一个灰度阈值,然后将图像对象中的每一个像素进行转换,小于灰度阈值的转换为0,大于阈值的转换为255
【例1.4】读取图片cat.jpg,将其二值图像。完成实验报告实验6(10分钟)图像的表示二值图像、灰度图像、彩色图像图像处理过程图像获取、图像预处理、特征提取、高级处理等计算机视觉计算机视觉是一门研究如何使机器“看”的科学,其目标是实现对图像的理解通过本课程,我们学习了本章小结第1章计算机视觉概述3.2
Pillow图像读取图像转换色彩分离和合并Pillow是python3的图像处理库,提供了基本的图像处理功能,如读写图像、几何变换、颜色变换等。前面介绍了图像的不同表示方式、色彩空间等概念3)色彩分离和合并split()和merge()函数分别用于色彩分离和色彩合并split()函数将RGB图像分离成3个图像,分别对应原始图像的红、绿、蓝通道。merge()函数与split()函数相反,将多个通道合并成彩色模式的图像【例1.5】读取图片cat.jpg,将其进行色彩分离和合并操作。完成实验报告实验7(10分钟)3)色彩分离和合并【案例】将两幅图分别进行色彩分离,并进行交叉合并完成实验报告实验8(10分钟)3)色彩分离和合并【案例】色相编辑完成实验报告实验9(10分钟)4)图像保存save()保存图像使用:im.save(savepath)注意:save只能用于保存RGB模式的图像如果是其他模式,需要通过convert("RGB")函数转换会RGB模式。完成实验报告实验10(10分钟)思考和拓展拓展一:使用NumPy创建形状为100*100的矩阵,矩阵的前10行元素值为0,后续10行为255,在后续10行为0,以此类推,并使用Pillow显示该矩阵,看看效果是怎么样?拓展二:随便找两幅相同尺寸的彩色图,分别使用split()分离通道后,随机从中选择3个通道合并成一个新图像,看看效果怎么样?图像的表示二值图像、灰度图像、彩色图像图像处理过程图像获取、图像预处理、特征提取、高级处理等计算机视觉计算机视觉是一门研究如何使机器“看”的科学,其目标是实现对图像的理解通过本课程,我们学习了本章小结第二章:OpenCV基本使用使用OpenCV读取图像编写第一个OpenCV程序OpenCV环境配置了解OpenCV的基础知识3.Pillow模式转换的函数是()A
changeto().Bconvert().Cpoint().Dmerge()4.色彩分离的函数是()A
open().Bimsplit()Csplit()Dmerge()复习1.
Pillow读取图像的函数是()A
imread().Bread().Copen()Dimopen()2.Pillow保存图像的函数是()A
save()B
imsave()Cwrite().Dimwrite()01了解OpenCV的基础知识OpenCV是什么OpenCV
OpenCV是一个开源的跨平台计算机视觉和机器学习软件库。由一系列C和C和少量C++类构成,实现了图像处理和计算机视觉方面很多通用的算法OpenCV与其他视觉函数库的性能比较OpenCV优点OpenCV
能方便地与基于Python的其他软件库集成,如NumPy、SciPy、Matplotlib等。简化了计算机视觉程序和解决方案的开发。拥有包括300多的跨平台的中、高层API。OpenCV具有优秀的性能表现,运行速度快。跨平台:运行在Linux、Windows、Android和MacOS操作系统上OpenCV能够
使用OpenCV
,可以完成读写图像捕获并保存视频过程图像(过滤,变换)执行特征检测在视频或图像中检测特定对象,如面部,眼睛,汽车。分析视频,即估计其中的运动,减去背景并跟踪其中的对象。OpenCV主要应用领域OpenCV模块
OpenCV的基本单元是模块,每个模块都包含了大量函数。Core:核心功能模块,模块主要包含OpenCV库的基础结构以及基本操作,例如OpenCV基本数据结构、绘图函数、数组操作相关函数、动态数据结构等Imgproc:图像处理模块,提供基本的图像处理功能,包括滤波以及类似的卷积操作。GPU:GPU加速库,提供基于CUDAGPU上的优化加速。。dnn:深度神经网络模块,支持主流深度学习框架训练生成与导出的模型.Feature2d:2D功能框架,包含用于检测、描述、特征匹配等算法。Ml:机器学习模块,包含了大量的统计模型和机器学习算法实现,如K-近邻、支持向量机、决策树、神经网络等。Objdectect:目标检测模块,包含人脸识别、行人检测等算法,也可用于训练检测器。第二章:OpenCV基本使用使用OpenCV读取图像编写第一个OpenCV程序OpenCV环境配置了解OpenCV的基础知识02OpenCV的环境配置2.1python安装2.2开发工具安装2.3OpenCV安装OpenCV环境配置Python安装Python的版本可分为Python2.x和Python3.x两大类,简称Python2和Python3。Python3是当前主推的Python版本,Python2.7已于2020年1月1日终止支持首先获得python,访问Python官方网站下载Python3.6,下载完成后直接运行安装即可。OpenCV环境配置环境管理工具安装使用环境管理工具Anaconda和集成开发环境PyCharm协助开发。Anaconda是开源的Python发行版本和环境管理器。Anaconda集成了包括Conda、Python在内的大量工具库,支持包括NumPy、OpenCV、TensorFlow等常用人工智能开发依赖库的环境配置。Anaconda官网下载安装包,即可进行安装。PyCharm是一款专为Python打造的IDE,带有一整套可以帮助用户提高开发效率的工具,如解释器配置、代码调试、语法高亮、项目管理、代码跳转、智能提示、代码自动补全、单元测试、版本控制等。OpenCV环境配置安装OpenCV1、在线安装。双击打开Anaconda,选择“Environments”,点击列表左下角的“Create”按钮新建一个Python环境,填写Python版本。OpenCV环境配置安装OpenCV1、在线安装。在新环境的未安装依赖库列表中搜索OpenCV并进行安装,安装过程中会一并安装一些依赖包,直接点击“Apply”按钮等待安装完成即可。OpenCV环境配置安装OpenCV1、在线安装。安装完成后,“OpenCV”库会出现在新环境的已安装列表中。OpenCV环境配置
安装OpenCV2、本地安装。如果网络状态不佳,在线安装方式有可能导致失败,因此可以采用本地安装的方式访问OpenCV官网,提前下载好对应版本的安装包。打开Anaconda,点击选择已经建立的环境,在弹出的菜单中,选择“openterminal”,打开命令行工具OpenCV环境配置安装OpenCV2、本地安装。使用命令行工具定位到安装包所在目录,输入指令“pipinstall安装包文件名”即可开始本地安装。第二章:OpenCV基本使用使用OpenCV读取图像编写第一个OpenCV程序OpenCV环境配置了解OpenCV的基础知识编写第一个OpenCV程序03编写OpenCV第一个程序新建项目打开PyCharm,选择“CreateNewProject”进入新项目创建界面,选择“PurePython”项目类别。指定项目存放位置“Location”,项目解释器“ProjectInterpreter”选项选择“Existinginterpreter”,二级下拉选择之前已经创建好的Anaconda环境名称。完成后点击“create”完成创建编写OpenCV第一个程序开始程序编写第一个OpenCV程序将编写实现读取、显示和保存图像的简单程序。该程序将实现图像的读取,图片的显示功能,图片名称为cat.jpg。事先保存在项目所在的目录中。OpenCV环境配置
代码分析:importcv2,和NumPy和Pillow一样,使用OpenCV之前,要先引入软件库。此处引入的模块名称是cv2,意指相对于旧版本cv的升级版本。旧版本cv使用C语言开发,内部是面向过程的实现方式,而cv2使用C++语言,内部采用面向对象的编程方式。imread()函数用于读取图像;namedWindow()函数用于创建窗口,参数“cat”表示新建名称为“cat”的窗口,参数“1”表示窗口不可调整大小;imshow()用于将图像显示在窗口中;参数“cat”表示显示在“cat”窗口。第2个参数表示将要显示的图像文件。waitKey()是等待按键的语句,可以让图像窗口一直显示,直到任意按键被按下后继续执行。destroyAllWindows()函数,表示关闭所有OpenCV创建的窗口。第二章:OpenCV基本使用复习分享时间OpenCV基本操作使用4.1图像读取4.2图像转换4.3色彩分离与合并04imread(filename[,flags])→retval
4.1
图像读取
OpenCV的imread()用于读取图像:函数说明:(1)retval是读取到的图像对象,在OpenCV中是Mat类型;(2)参数filename是将要读取的图像文件名;函数imread()支持大部分图像格式,常用的包括位图(*.bmp、*.dib)、JPEG图像(*.jpg、*.jpeg)、网络图形(*.png)、TIFF文件(*.tiff、*.tif)等(3)flag是读取标记,可省略,不同标记值代表含义不同,如-1表示读取图像格式不变,0表示单通道的灰度图像,1表示三通道BGR图像,为默认值。4.1
图像读取在实际编码过程中,相较于直接使用数字方式,大家更提倡使用OpenCV常量的方式。imread()函数的flag参数取值的常量表示如表所示im=cv2.imread(“cat.jpg”)#读入图像文件
print(im.shape)#(200,200,3)
print(im.size)#120000
print(im.dtype)#uint8
4.1
图像读取
获取图像的属性信息使用imread()函数获取图像对象后,可以继续获取图像的属性信息,包括图像形状(shape)、像素数(size)、数据类型(dtype)等。解释:shape属性返回图像的行数、列数和通道数。size属性返回图像的像素数量。dtype属性返回的是图像的数据类型。4.1
图像读取【练习1】采用不同的flag读取图片,查看各自的形状、尺寸和数据类型结果:defaut(1026,1024,3)3151872uint8bgrim(1026,1024,3)3151872uint8unchange(1026,1024,4)4202496uint8grayim(1026,1024)1050624uint8完成实验报告练习1imshow(winname,mat)→None
imshow("Window1",cv2.imread("cat.jpg"))
4.2
图像显示
使用imshow()函数可以显示图像参数说明:None表示函数没有返回值;winname是窗口名称。如“Window1”。mat是图像对象。提示:如果要将窗口创建和显示分离,可以在使用imshow()函数之前,使用函数namedWindow()提前创建窗口。此处在imshow()语句前添加dWindow("Window1"),效果是一样的。例如,在窗口中显示图像cat.jpg的语句为:destroyWindow(winname)→None
cv2.waitKey(5000)
cv2.destroyWindow("Window1")
4.2
图像显示
使用destroyWindow()可以销毁图像窗口参数说明:None表示函数没有返回值;winname是要销毁的窗口名称。提示:在实际使用该函数通常搭配waitKey()函数使用。waitKey()用于监听按键事件,当监听到按键被按下,则继续执行程序,或者设置等待时间。如果要直接销毁所有OpenCV的创建的窗口,则使用destroyAllWindows()函数。如等待5秒后销毁窗口,代码为:4.2
图像显示
waitKey()和ASCII码表:waitKey(waittime)→key
#key对应ASCII码(美国信息交换标准代码)whileTrue:
ifcv2.waitKey(0)==27:
cv2.destroyAllWindows()
break监听特定按键的实例:4.2图像显示【练习2】创建一个窗口“win”,在该窗口中默认显示“cat.jpg”.持续监听键盘,如果监听到空格键(key==32),则显示图像在cat.jpg和little.png之间切换。如果监听到ESC(key==27),则销毁窗口。完成实验报告练习2
imwrite(filename,img[,params])→retval
cv2.imwrite(“lena.jpg",cv2.imread("cat.jpg"))
4.3
图像保存
imwrite()函数表示保存图片到本地参数说明:(1)retval表示返回保存图像对象,为True或False;(2)参数filename是待保存文件地址的完整路径,包含文件扩展名;(3)img是被保存的图像对象;(4)params是可选的保存参数;如将读出的cat.jpg文件保存为lena.jpg,语句为:4.1
图像读取【例】读取图片cat.jpg并显示,等待按键后执行窗口销毁、图像数据打印,并重新将图像保存为cat1.jpg。完成实验报告练习3
4.1
图像读取运行结果分析:首先读取到的图像显示出来。执行到“cv2.waitKey()”开始等待,此时按下任意按键,图像窗口会关闭。执行结果窗口打印出图像数据。图像输出数据片段如图从图中可以看出输出的像素是3个元素的数组。需要注意的是,OpenCV默认读取的三通道图像为BGR格式BGR复习1.
OpenCV读取图像的函数是?A
open()Bimread()Cload()Dimopen()2.OpenCV保存图像的函数是?A
save()Bimsave()Cimwrite()write()3.
cv2.waitKey无限等待键盘按下事件的参数是?A
cv2.waitKey(5000)Bcv2.waitKey(-1)Ccv2.waitKey(1)Dcv2.waitKey(0)im=cv2.imread("cat.jpg",cv2.IMREAD_GRAYSCALE)
4.2
图像转换(1)
转灰度图像图像处理过程中,为了减少减少数据量,提高计算效率,经常需要将彩色图转换为灰度图或二值图像。方法一:以灰度图的形式读取图片,直接将imread()函数的第2个参数设置为cv2.IMREAD_GRAYSCALE或0即可,语句为:im1=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
4.2
图像转换4.2.1转灰度图像OpenCV也专门提供了cvtColor(),用于不同颜色模式转换的函数,函数定义为:cvtColor(src,code[,dst[,dstCn]])→dst
其中:(1)
dst:表示转换后的目标图像;(2)
src:要转换的原始图像;(3)
code:指定颜色空间转换类型编码;(4)
dstCn:表示目标图像的通道数,默认为None,即保持原图像的通道数。例如:将前面彩色图像转为灰度图像,通过该函数实现,将code参数设置为cv2.COLOR_BGR2GRAY4.2
图像转换常用cvtColor()的code参数如表所示:4.2
图像转换【例2.2】以默认方式读取图片cat.jpg,将图像转为灰度图,比较原始图像与灰度图的区别。完成实验报告练习4
4.2
图像转换代码分析:(1)OpenCV默认按照BGR的模式读取图像;(2)
通过cvtColor()函数转变为RGB模式;(3)
转变为单通道的灰度图模式。从图中可以看出,虽然BGR转变为RGB,但imshow()函数仍然按照B-G-R的通道顺序显示图像,形成了通道错位。所以,RGB格式图像在色彩上出现了明显的变化,原来的R通道显示为B通道,而原来的B通道则显示为R通道。4.2
图像转换
4.2.2转二值图像二值图像是只有“黑”和“白”两种颜色的图像,将原始图像转变为二值图像的基本原理是:设置一个阈值,将小于阈值的像素值改为0,大于阈值的像素值改为255。OpenCV的threshold()函数可以方便地实现二值图像转换。threshold函数定义threshold(src,thresh,maxval,type[,dst])→retval,dst
其中:src是原图像对象,thresh表示中间阈值,可以任意设置,范围在0到255之间。maxval是最大阈值,设置为255。type是阈值算法类型,type设置为0,表示常规的阈值算法。dst是结果数据图像,retval是阈值。4.2
图像转换【例2.3】以灰度图的方式读取图片cat.jpg,将灰度图转为二值图并显示,比较灰度图与二值图的区别。完成实验报告练习5
4.2
图像转换结果分析:采用了NumPy的hstack()函数对图像进行横向拼接的,将两个图片显示在同一个窗口中。hstack()函数可以对相同形状的图像进行横向拼接,纵向拼接要使用vstack()函数。4.3色彩分离与合并
OpenCV可以对图像进行色彩的分离与合并,其中split()函数可用于拆分图像的通道,merge()用于通道合并。split()函数定义为:split(m[,mv])→mv
式中,m是多通道数组,mv是通道矢量。如拆分1个BGR图像,可使用语句为:b,g,r=cv2.split(im)
提示:OpenCV图像通道排序顺序是“蓝色B-绿色G-红色R”,并非习惯上认为的“红色R-绿色G-蓝色B”。同时,拆分后的图像数据的维数会发生变化,不再是三维数组,而是二维数组,每个元素表示像素在拆分通道上的值。4.3色彩分离与合并
merge()用于通道合并,函数定义为:merge(mv[,dst])→dst
其中:dst是目标图像,mv是通道矢量。如要将通道b、g、r合并为BGR图像为newim=cv2.merge([b,g,r])
4.3色彩分离与合并
【例2.4】将BGR图像lena.jpg进行通道拆分,再将通过顺序变化后合并成新图像完成实验报告练习6
4.3色彩分离与合并
代码分析:(1)首先通过split()方法将RGB图像cat.jpg
拆分成b、g和r通道(2)使用merge()函数将3个通道错序合并;(3)最后通过NumPy的拼接函数对结果分别进行拼接显示。从效果图中能明显看到通道错序后的变化,图像从暖色调变成了冷色调。
NumPy与OpenCV互转NumPy
to
OpenCV由于OpenCV是基于Numpy,所以不需要额外的转换函数,就可以直接被OpenCV使用。#【案例】使用numpy生成3个形状为(200,200)的随机矩阵,并使用opencv合并显示。
importcv2
importnumpyasnp
b=np.random.randint(0,255,(200,200),dtype=np.uint8)
g=np.random.randint(0,255,(200,200),dtype=np.uint8)
r=np.random.randint(0,255,(200,200),dtype=np.uint8)
im=cv2.merge((b,g,r))
cv2.imshow("rs",im)
cv2.waitKey(0)#【案例】使用numpy生成形状为(200,200,3)的全0数组,并使用opencv显示。
importcv2
importnumpyasnp
arr=np.zeros((200,200,3),dtype=np.uint8)
cv2.imshow("rs",arr)
cv2.waitKey(0)
cv2.destroyAllWindows()NumPy与OpenCV互转OpenCV
to
Numpy由于OpenCV是基于Numpy,所以不需要额外的转换函数,就可以直接使用Numpy的运算。#【练习8】Opencv读取图像cat.jpg,对图像对每个像素进行数值运算,并显示,查看效果。
完成实验报告练习7
拓展练习【案例】使用OpenCV实现多图交叉通道合并,查看合并效果。完成实验报告练习8
拓展练习【案例】色相编辑完成实验报告练习9
下一次分享思考题
问题一:学习OpenCV的环境配置方法,并在自己的电脑上完成环境配置?问题二:找两幅相同尺寸的彩色图,分别使用split()分离通道后,随机从中选择3个通道合并成一个新图像,看看效果怎么样第3章给图像加滤镜
1.3
图像滤镜
1.3
图像滤镜
卷积运算滤镜变换的模板是一个单通道浮点矩阵,被称为卷积核,相应的计算规则被称为卷积运算。移动卷积核的过程中,有“步幅”的概念,用于指定卷积核在输入矩阵上的移动幅度,如步幅为1,每次移动1位,步幅为n,则每次移动n位。1.3
图像滤镜
处理不了的边界1.3
图像滤镜
卷积运算解决边界问题的1个有效的办法是边缘填补,主要填补方法如下:填补方法描述cv2.BORDER_DEFAULT边界默认:OpenCV默认的方法,自动填充图像边界,效果像是映像一样。cv2.BORDER_CONSTANT边界常数:使用常数填充边界,如0或255。cv2.BORDER_REPLICATE边界复制:用已知的边缘像素值填充边界。cv2.BORDER_WRAP边界包装:用另外一边的像素来补偿填充。2.3函数语法卷积函数该函数支持任意卷积核的卷积运用,呈现模糊、锐化、浮雕等滤镜效果。filter2D()函数定义为:filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])→dstdst是结果图像;src是输入图像;ddepth是结果图形的深度,设置为-1,表示图像深度与输入图像一致;kernal是卷积核,anchor:锚点,默认为(-1,-1)borderType是边缘补充方式,OpenCV默认使用cv2.BORDER_DEFAULT方式。2.3函数语法例如::[[35799][35799][35799][35799][35799]][[357910][357910][357910][357910][357910]][[47101310][35795][35795][35795][23450]]1.3
图像滤镜
卷积运算卷积运算可以产生Photoshop等图像处理软件中的各种滤镜效果,如模糊、锐化、轮廓、浮雕等。常用的卷积核矩阵如下:第3章给图像加滤镜
复习编程实现明确任务内容学习图像运算的基础知识图像运算基本知识
1.1图像运算1.3图像滤镜1.2基本绘图011.1图像运算
滤镜的实现建立在图像运算的基础上,学习编写滤镜小程序之前,先要了解图像之间是如何进行运算的。图像之间运算的主要内容有基本运算、绘图、图像变换和图像滤镜。根据图像的数学特征,图像基本运算可分为点运算、代数运算、逻辑运算和几何运算。1.1图像运算
1.1图像运算
1.1图像运算
点运算1)如果a>1,输出图像的对比度增大(灰度扩展)2)如果0<a<1,输出图像的对比度减少(灰度压缩)3)如果a<0,输出图像的暗区域将变亮,亮区域变暗3.1图像运算
完成实验报告练习13.1图像运算
3.1图像运算
OpenCV图像代数运算主要函数3.1图像运算
符号方法与函数方法运算过程3.1图像运算
代数运算【例】采用符号法和函数法对图像做代数运算,比较运算结果。完成实验报告练习2.3.1图像运算
代数运算代码分析:原则上进行代数运算的2个图像的形状和类型必须保持一致,如果大小不一致,广播特性将会发挥作用。如Add()函数的参数可以是图像和图像,也可以是图形和数值。
3.1图像运算
逻辑运算逻辑运算是指对两幅或多幅图像的对应像素做逻辑与、或、异或、非等运算。常规逻辑运算的形式是按位运算,如果图像数据类型是8位整数,要进行逻辑运算,首先要将整数转换为8位的二进制数,再对8位二进制数按位进行逻辑运算,最后将结果再转换为8位整数。例如:有数值1为198,数值2为219,他们的二进制分别是11000110、11011011,分别将他们进行逻辑运算,结果如下:数值(198与219)结果(十进制值)结果(二进制值)与运算19411000010或运算22311011111异或运算2900011101非运算(数值1)57001110013.1图像运算
逻辑运算逻辑运算的一个典型应用是掩模。在图像处理过程中,经常会使用特定的图像全局或局部地对待处理图像进行遮挡,以控制图像处理的区域或处理过程,此处用于覆盖的特定图像被称为掩模,也称为掩码。掩模在OpenCV中非常普遍,如add(src1,src2,mask)函数中mask指的就是掩模。掩模的实现采用了逻辑与运算的原理,即原图像与0进行逻辑与运算,结果是0,与1进行与运算,结果为原图像值。于是,只要设置好值为0和1的掩码,就能够达到遮挡部分区域的效果。3.1图像运算
逻辑运算【例】读取灰度图cat.jpg,为图像加上掩模,只显示头部区域。代码分析:以灰度图方式读取图像后,使用zeros()函数新建一个形状与类型和原图像一样的全0数组,并设置数组的中心区域值为255,即二进制数11111111。OpenCV的bitwise_and()函数用于进行图像之间的逻辑与操作。完成实验报告练习33.1图像运算
逻辑运算程序运行效果:第3章给图像加滤镜
复习【单选】图像的值为100和250的两个像素通过“+”运算结果为?
A
350
B
100
C
255
D
94【单选】图像的值为100和250的两个像素通过add()函数运算结果为?
A
350
B
100
C
255
D
943.1图像运算
几何运算几何运算也称为几何变换,相较于前面不会改变像素位置的运算类型,几何运算是一类能够实现像素坐标变换的运算。从变换性质来分,几何变换可以分为:(1)图像的位置变换(平移、镜像、旋转)(2)图像的形状变换(放大、缩小)(3)图像的复合变换3.1图像运算
几何运算缩放:resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])→dst其中:src是输入图像,dsize是输出图像大小,如(100,100);其他可用替代的方式还有设置水平缩放比例fx和垂直缩放比例fy。图像大小和缩放比例不能同时使用,如使用缩放比例,dsize需要设置为None。Interpolation是插值方式,用于选择在缩放过程中对无法映射的像素赋值的方式,在实际使用的时候可以不用特意去设置,使用默认方式(INTER_LINEAR)即可。此处的dsize是(宽-x轴,高-y轴),而np.shape获得的多维数组的默认存储方式是C,先行后列,即形状为(高-行数,宽-列数,通道)示例语句:
dst=cv2.resize(src,(100,100))dst=cv2.resize(src,dsize=None,fx=2,fy=3)3.1图像运算
几何运算缩放:resize(src,dsize[,dst[,fx[,fy[,interpolation]]]])→dst其中:示例语句:dst=cv2.resize(src,(100,100),interpolation=cv2.INTER_NEAREST)interpolation 所用的插值方法INTER_NEAREST 最近邻插值INTER_LINEAR 双线性插值(默认设置)INTER_AREA 使用像素区域关系进行重采样。它可能是图像抽取的首选方法,因为它会产生无云纹理的结果。但是当图像缩放时,它类似于INTER_NEAREST方法。INTER_CUBIC 4x4像素邻域的双三次插值INTER_LANCZOS48x8像素邻域的Lanczos插值Resize()3.1图像运算
几何运算翻转:flip(src,flipCode[,dst])→dst
dst是输出图像,src是输入图像,filpCode是旋转类型,0表示绕着x轴翻转;正数如1、2等为绕着y轴翻转;负数如-1、-2等为绕着x轴、y轴同时翻转。示例语句:
dst=cv2.flip(src,1)
3.1图像运算
几何运算翻转:flip(src,flipCode[,dst])→dst
仿射变换和透视变换
本质:矩阵运算区别:仿射:基于3个固定顶点的变换透视:基于4个固定顶点的变换OpenCV函数:warpAffine(img,M,shape)warpPerspective(img,M,shape)1803.1图像运算
放射变换仿射:warpAffine(src,M,dsize[,dst[,flags[,borderMode[,borderValue]]]])→dst其中:dst是输出图像,src是输入图像,M代表一个2×3的变换矩阵,通过使用不同的变换矩阵,就能实现不同的变换功能;dsize是输出图像的尺寸大小。仿射变换通过一系列变换的复合实现,能够完成平移、缩放、翻转、旋转和剪切等几何变换。示例语句:
dst=cv2.warpAffine(src,M,(200,200))
3.1图像运算
3.1图像运算
放射变换常用M变换矩阵变换类型变换矩阵平移缩放旋转翻转切变3.1图像运算
仿射变换【例】读取灰度图cat.jpg,使用平移矩阵对图像做简单平移操作。代码如下:完成实验43.1图像运算
仿射变换通过函数获得M参数:center:旋转中心位置angle:旋转角度scale:图像缩放比例M=cv2.getRotationMatrix2D(center,angle,scale)【例】,要以图像中心为圆点,逆时针旋转45度,并将目标图像缩小为原始图像的0.6倍:完成实验5透视变换cv2.warpPerspective(src,M,dsize=(cols,rows))参数:
src:原图
M:一个3x3的变换矩阵
dsize:输出图像的尺寸大小,
先指定(第一个参数是)col,再指定(第二个参数是)rowM如何得到?透视变换cv2.warpPerspective(src,M,dsize=(cols,rows))完成实验61.2
OpenCV基本绘图计算机中图像是以数组的形式存储,数组中的值代表图像某个像素点的像素值,只要能对数组的值进行操作,就可以实现绘图。OpenCV提供了封装好的绘图函数,不需要关心如何修改像素值,直接调用就可以绘制图形,包括直线、矩形、多边形、圆、椭圆、文字等。部分函数如下:函数描述line()在输入图像上画直线arrowedLine()画带箭头的直线rectangle()画矩形circle()画圆形ellipse()画椭圆putText()显示文字1.2
OpenCV基本绘图
【例3.5】新建一个400×400尺寸的黑色画板,在画板上进行基本绘图。代码如下:完成实验7拓展绘图练习使用opencv绘图函数,绘制国旗(允许使用AI工具生成Opencv代码)/guoqing/guoqi/第3章给图像加滤镜
1.3
图像滤镜
1.3
图像滤镜
卷积运算滤镜变换的模板是一个单通道浮点矩阵,被称为卷积核,相应的计算规则被称为卷积运算。移动卷积核的过程中,有“步幅”的概念,用于指定卷积核在输入矩阵上的移动幅度,如步幅为1,每次移动1位,步幅为n,则每次移动n位。1.3
图像滤镜
处理不了的边界1.3
图像滤镜
卷积运算解决边界问题的1个有效的办法是边缘填补,主要填补方法如下:填补方法描述cv2.BORDER_DEFAULT边界默认:OpenCV默认的方法,自动填充图像边界,效果像是映像一样。cv2.BORDER_CONSTANT边界常数:使用常数填充边界,如0或255。cv2.BORDER_REPLICATE边界复制:用已知的边缘像素值填充边界。cv2.BORDER_WRAP边界包装:用另外一边的像素来补偿填充。2.3函数语法卷积函数该函数支持任意卷积核的卷积运用,呈现模糊、锐化、浮雕等滤镜效果。filter2D()函数定义为:filter2D(src,ddepth,kernel[,dst[,anchor[,delta[,borderType]]]])→dstdst是结果图像;src是输入图像;ddepth是结果图形的深度,设置为-1,表示图像深度与输入图像一致;kernal是卷积核,anchor:锚点,默认为(-1,-1)borderType是边缘补充方式,OpenCV默认使用cv2.BORDER_DEFAULT方式。2.3函数语法例如::#对类型为uint8的numpy矩阵做卷积运算,
使用不同的插值方式,查看卷积结果。代码如下:
importcv2
importnumpyasnp
A=np.array((
[1,2,3,4,5],
[1,2,3,4,5],
[1,2,3,4,5],
[1,2,3,4,5],
[1,2,3,4,5]),dtype=np.uint8)
kernel=np.array(([0,-1,0],[0,1,1],[0,1,0]),dtype="float32")
des=cv2.filter2D(A,-1,kernel,borderType=cv2.BORDER_DEFAULT)
des1=cv2.filter2D(A,-1,kernel,borderType=cv2.BORDER_REPLICATE)
des2=cv2.filter2D(A,-1,kernel,borderType=cv2.BORDER_CONSTA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目总工程师面试问题及答案
- 心理咨询师健康心理学模拟真题及答案
- 长沙网约车从业资格证考试试题及答案
- 野生动物饲养繁殖工岗前实操评优考核试卷及答案
- 知识产权侵权诉讼试题及答案
- 医疗器械临床试验项目检查要点及判定原则培训考试及答案
- 中储粮质量检验岗位面试题及答案
- 中职第三学年(运输管理)货物运输路线规划2026年阶段测试题及答案
- 2025年广西壮族自治区防城港市初二生物上册期中考试试卷及答案
- 2025年广东省汕尾市初一语文上册期中考试试卷及答案
- 2025数据基础设施用户身份管理和接入要求
- 服装店装修施工方案范本
- 甘肃省培训费管理办法
- 认识花生课件
- 【《基于java的美妆商城的设计与实现》13000字】
- 白银市2025-2026学年七年级上学期语文月考测试试卷
- 毕业论文8000字范例学前教育
- 浙江省公路工程监理用表-监理抽检记录2025
- 理想汽车考试试题及答案
- 先心病的介入治疗与护理
- 成人高考高起专模拟试题
评论
0/150
提交评论