人工智能对计算机视觉有火灾需求。作为计算机视觉应用程序开发框架,OPENCV也越来越受欢迎,市场需求大大增加。因此,在学习Python的基础上,OpenCV技术的学习非常重要且必要。成熟的学习框架,但也具有广泛的应用程序。学习某些OPENCV技术对大学生具有不同寻常的意义。
设计报告的基本内容包括三个部分:封面,文本和参考。
1.覆盖
根据模板填写封面,不得随意更改。
2.文本
文本是设计报告的主体,由以下部分组成:
(1)背景简介,问题的描述
描述编程问题需要编程。
(2)基本要求
提供具体要求以满足该计划。
(3)需求分析
设计具有不道德陈述的计划的任务强调该程序要做什么?显然规定了:
输入形式和输入值的范围;
输出的形式;
程序可以实现的功能;
测试数据:包括正确的输入及其输出结果以及错误输入及其输出结果。
(4)摘要设计
在此程序中解释主程序的过程以及每个程序模块之间的级别(呼叫)关系。
(5)详细设计
实现设计中定义的所有数据类型,给出源程序的关键部分列表,并要求程序具有足够的注释语句,至少对每个函数参数的含义和函数返回值注释。
(6)调试分析
内容包括:调试过程中如何遇到的问题是如何解决以及设计和实施的审查和分析;
(7)用户使用说明
说明如何使用您写的程序列出详细的操作步骤。
(8)测试结果
设计测试数据或提供特定的测试数据。测试数据必须完整和严格,这可以全面测试设计程序的功能。
(9)摘要
(10)参考
列出相关信息和书籍以供参考。
在理论研究中,在过去十年中,对象识别一直是计算机视觉领域的一个流行研究点。每年在顶级会议和期刊中,有许多相关的任务。在某些详细的应用程序场景中,例如面部识别和指纹识别已经成熟。这篇文章研究了对象识别的相关理论,并根据OPENCV设计实现了五颜六色的空间图,以尝试解决某些颜色路径识别。相关算法主要包括两个主要部分:特征提取和特征提取和对特征检测算法的匹配。深度理解有助于为特定场景选择适当的算法,并在实际应用程序中对其进行优化。
该项目主要是为了通过摄像机读取相机的视觉信息。它分析了需要识别的颜色。颜色由点标记,并连续绘制点以实现图纸的最终效果。在它们的旁边,可以使用窗口的调用恢复来逆转窗口。腐蚀以消除噪声斑;扩展,连接噪声和阴影分割分配的区域;“礼貌”;“黑帽”;调整大小;窗户合并;按钮添加参数调整;阈值和其他技术。通过学习不同的模块,它将其集成到一个整体项目中。该项目主要根据OpenCV在GitHub的官方文件中的官方文件来学习和完成该项目。
66.66.66.66.66.6
OPENCV是基于BSD许可(开源)的跨平台计算机视觉和机器学习软件库,可以在Linux,Windows,Android和Mac OS操作系统上运行。[1]它是一系列C函数和少量C ++类的轻巧且高效的,它还提供了诸如Python,Ruby,Matlab和其他语言等接口,以及图像处理和计算机视觉中的许多一般算法。用C ++语言编写。它具有C ++,Python,Java和Matlab接口,并支持Windows,Linux,Android和Mac OS。OPENCV主要用于真实的-Time Visual应用程序。提供对C#,CH,Ruby,Go.opencv的支持可以在Windows,Android,Maemo,FreeBSD,OpenBSD,OpenBSD,iOS,Linux和Mac OS.users等平台上运行。SourceForge中的官方版本,或从svn.opencv获取开发版本也使用cmake。当将Windows输入中的OPENCV汇编到摄像机输入中时,需要DirectShow SDK中的某些基本类。可以从Pre -Pregiled Microsoft获得SDK平台SDK(或6.0之前的DirectX SDK 8.0C / DirectX Media SDK)。Pytython是Guido Van Rossum发起的通用编程语言。由于其简单性和代码的可读性,它很快就很流行。它允许程序员以更少的代码线表达自己的想法而不会降低可RECHABILAS.com的语言,例如C/C ++等语言,Python较慢。其他单词,Python可以是易于使用C/C ++扩展,这使我们可以使用C/C ++编写计算密度代码并创建一个可以用作Python模块的Python框。这给我们带来了两个好处:首先,代码为快速作为原始的C/C ++代码(因为它是在后台运行的实际C ++代码),其次,在Python中编写代码比C/C ++更容易。OpenCV-Python是Python原始OPENCV C ++实现的包装设备。OpenCV-Python使用numpy, 这是使用MATLAB风格的语法进行数值操作的高度优化的库。所有OpenCV数组结构都转换为Numpy数组。这也使使用Numpy更容易与其他库(例如Scipy和Matplotlib)集成。
图1显示了彩色空间图的整体结构设计。总体分为四个模块:摄像机读取图像框,获取颜色,基本的单元点以及绘图路径的实现。此窗口中的路径;在获取颜色模块时,它主要借用CV2中的腐蚀以消除噪声斑。扩展和其他功能以执行所需的识别色彩目标和识别;在基本的单元模块中,主要是绘制彩色圆圈。该圆形是绘图路径的基本单位。通过连续重复这种圆形形状,绘制路径;在实现绘图路径的模块中,基本的单位点通过函数连续重复重复以实现路径图。
在四个模块中,读取了相机的图形框设计,然后简单地识别,然后使用移动按钮来通过添加调整按钮来获得最佳的识别效果,以便获得需要的RGB值通过识别。通过获得RGB值,您可以调用OPENCV函数以实现基本单元的圆形图,然后将其连接以实现路径绘图的实现。在过程中,需要进行多个实验性调试。每个模块可以多次修改。从初步设计到代码的写作,算法的写作以及算法代码的优化。
我们需要找到我们的颜色,我们需要使用网络摄像头,然后我们可以在发现颜色创建绘画示例的任何地方放置不同的点。因此,我们需要的第一件事是网络摄像机,所以什么我们需要做的是根据官方文档的第一章致电我们的网络摄像头。
首先,我们需要通过导入的CV导入库并导入OpenCV库。我们设置了两个变量,一个在窗口中为640,另一个是窗口的高度为480。它可以通过framewidth = 640和framehead =实现。480.然后分别设置窗口的宽度和高度的ID号,分别为第3和4号。在同一时间,我们设置了窗口的亮度。测试后,我们选择150的亮度作为屏幕亮度。视频关注功能是调用相机的功能。参数为1个未呼叫的参数,参数为0表示呼叫,我们开始将其设置为1。当我们需要呼叫时,我们将其设置为0。
然后,我们循环图像的位置,使用IMShow函数,然后将窗口名称设置为结果。为了退出,我们将“ Q”设置为“ Q”,以退出。
目前,我们测试,预期效果是真实的摄像头。
运行程序并执行相机测试。结果,相机成功地读取了。这里显示四个手指,屏幕上可以看到四个手指。测试成功。
然后执行程序提款功能的测试。按键盘上的Q退出。测试结果成功退出。当输入方法是中文模式时,有必要将其更改为英语模式,然后将其更改为Q。
窗口创建成功后,这是对颜色的获取。我们要做的就是找到颜色,以便我们找到颜色。我们需要介绍颜色检测守则。该部分的内容涉及官方文件第7章中的引言。我们可以阅读有关功能学习和编写代码的相关内容。我们需要检测上限和下限值。同时,我们还需要将窗口转换为HSV空间。在代码中,我们需要定义一个函数以找到我们的颜色,并且特定代码如下。
在第一步中,让我们首先测试测试,将函数的输入设置为ING值,然后需要将其转换为HSV Space。要测试它是否正常工作,我们将CV2.Imshow()加入测试。
CV2.Imshow(“ IMG”,Mask)仅用于测试,然后将删除。
我们不想找到一种颜色。我们想找到不同的颜色,因此,当我们调用FindColor()函数时,我们希望找到不同类型的颜色和任何颜色的存在,并将其用作输出。因此,我们可以以某种形式定义某些内容函数中的列表,例如颜色的最小值和最大值。我们定义一个称为MyColors的列表,这基本上是我们要检测到的颜色列表。因此,当我们需要分配值时,我们给出最小值和最大值颜色饱和值。在这里,我们选择一些特定的颜色,例如红色,蓝色,绿色和其他颜色来提供颜色预订值。这可以帮助我们使用网络摄像头选择正确的色相饱和值。
以下是用于检测和预订的颜色代码:
在此处的代码中,代码主要参与官方文档第7章的内容。它主要是将原始手动调整功能集成到按钮中。当我们调用按钮移动时,屏幕可以通过HSV空间进行转换,HSV空间更方便地获取颜色的特征样本。在图3代码的基础上,添加按钮集成,设置上限和下限值按钮调整范围。
我们将cap = cv2.VIDEOCAPTURE(1)设置为cap = cv2.VIDECAPTURE(0),然后运行代码进行测试。
鞋面是检测窗口。左侧是值得输出的颜色RGB,右侧是要调整的按钮。
首先,我们进行红色检测,然后进行蓝色和绿色测试。红色和蓝色主要使用红色笔和蓝色。绿色主要使用校正带上方的绿色零件。
由于红色测试,我需要将红色保留在图片中,并尝试将其他零件保持黑色。
我们可以看到,在图片中,我通过调整参数来保持白色,最终输出为0,色调最小值为0,SAT最小值为91,值最小值为0,色调最大值12,SAT是SAT的最大值,值最大为255。
但是检测到手上的颜色。因此,我们需要调整色调最大值的值,将其调整为9,并有效地删除了手的颜色。
因此,我们记录了所需的值,为0,91,0,9,255,255。因此,将这些值添加到MyColor列表中。
由于蓝色测试,我需要将蓝色白色保留在屏幕上,并尝试将其他零件保持黑色。
我们可以看到,在屏幕上,我通过调整参数将其保持为白色,最终输出为97,色调最小值为97,SAT最小值为107,值最小值为36,色调最大值为179,SAT是SAT,SAT的最大值为255,值最大值为193。
但是检测到附近的环境色,我们需要进行调整以尽可能优化它。
调整后,最终值为104,100,33,174,255,226.Add at MyColor列表。
由于绿色测试,我需要将绿色保留在图片中,并尝试将其他零件保持黑色。
绿色参数调整更容易,我们不需要执行辅助优化。我们的参数是77,150,0,91,255,255.ADD,它添加到MyColor列表中。
然后,我们的MyColor列表获得了三种颜色的最小和最大色调和饱和值。
现在,我们可以简单地创建蒙古版本。首先,我们需要导入numpy库,并将numpy库名称设置为NP通过导入numpy为NP。
然后,我们需要将所需的值放在下部,上部和掩码中。速度代表最小色调和饱和值,并且是MyColor每个元素的前三个值。鞋面代表最大色调饱和值。这是MyColor每个元素的后三个值。因此,我们只需要阅读MyColor的部分即可。例如,我们首先读取红色读数,然后必须设置较低的设置如下,soulter = np.Array(mycolors [0] [0] [0:3]),读取第一个元素的第一个元素的第一个值,然后,我们需要将mycolor用作findcolor函数的输入值,以便在函数中调用该函数,设置defofolor(img,mycolors)。相似,我们需要在鞋面中进行相同的设置,例如upper = np。阵列(mycolors [0] [3:6])。最后,您需要在while循环中调用FindColor函数。
然后运行测试程序。我们可以看到红色检测是正常的,但这只是一个红色检测。我们还需要检测列表中的所有颜色。为此,我们需要添加一个用于循环的循环以遍历mycolor中的可变颜色,然后使用颜色[0:0:3]和颜色[3:6]而不是原始值。最后,由于有多个不同的窗口,因此窗口名称需要不同,因此我们将窗口名称设置为STR函数中MyColor值的每个元素的第一个值,分别为0,104和77。
运行用于测试的代码。
可以看出,我们同时显示三种颜色,从左到右,红色,蓝色和绿色。
如果我们需要添加更多颜色,我们可以将其色相饱和度直接添加到MyColor列表中,然后可以直接识别。
现在,测试的一部分已经结束,我们可以删除cv2.imshow(str(color [0]),掩码)来删除它。
现在,我们需要找到需要在图像中检测到的对象。为了实现这一目标,我们需要获取轮廓,因此我们需要近似周围的边界框,以便我们找到对象的位置。。
我们需要在while循环中创建一个新映像,以在getContours()函数中调用。
现在,我们可以测试是否打印正确的打印。在FindColor函数中,我们需要查找大纲,因此我们需要调用FindColor函数中的GetContours函数,并将参数设置为掩码。
运行测试程序
因此,测试不会产生任何效果,我们需要找到错误的位置
错误是,在循环输出的最后一个时,我们没有输出新图像IMGRSULT的副本,而是输出IMG,而IMG是因为我们将cv2.imshow(str(color [0]),蒙版),掩码)删除它而无需显示。因此,我们需要将IMG更改为IMGRESULT,然后执行代码运行测试。
红色轮廓检测
蓝色轮廓检测
绿色轮廓检测
我们需要包围颜色的边界框。现在我们需要发送这些值以发送中心点,但是我们必须从NIB中绘制,而不是检测对象的中心,因此我们将发送中心。因此,我们需要返回x+W // 2和y价值将使我们能够在小费及其中心获得最高点。例如,对于某些事故的出现,区域不超过500,我们需要返回一些值,因此我们需要给出初始值x,y,w和h至0。
我们需要在findcolor函数中获得x,y函数,因此我们将getContours(mask)的值分配给x和y的值。x和y的值等于心脏圆,因此我们可以开始画一个圆圈。我们将其绘制在Imgresult图像的结果上。中心点为x和y。作为路径图的基本单元。然后首先自定义颜色,用cv2.filled填充颜色。例如,我们首先将颜色设置为(255,0,0)。这里使用的颜色模式是我的BGR,因此我们应该在结果中看到一个蓝色的实心小点。
红色的
蓝色的
绿色的
测试结果成功地绘制了三种颜色的点。
请注意此处的区别,因为我们输入的点是图像顶部的中心,因此,当我们的图像角度不大时,我们的点就会在对象上。当倾斜发生时,点将在物体外面。当没有倾斜时:
当有倾斜时:
为了解决这一点,目前更加棘手,因此我们不打算讨论太多细节。现在我可以保持直截了当。现在需要更改的是,我需要显示的点颜色不应该是我们的自定义颜色,而是对象本身的颜色。现在已经正确检测到了轮廓,我们不再需要大纲,因此我们可以先删除它们。
我们需要更改颜色,因此我们需要定义颜色值,例如检测红色,图纸中应该是什么颜色,因此我们将其命名为mycolorvalues,并且我们还需要在mycolorvalues中创建列表。在此列表中,我们需要定义您想要的颜色的定义。在此,我们暂时拥有三种颜色,因此我们定义了三列。我们可以根据相应的色相饱和值转换。转换网站是https://www.rapidtables.com/web/color/rgb_color.html.red
蓝色的
绿色的
然后,我们使用BGR模式将颜色写入MyColorValues列表中。
这些是我们当前的颜色。我们可以做的是根据这些颜色绘制一个实心圆圈。我们需要amimcolorvalues的价值作为输入。因此,IcolorValues需要用作FindColor的输入参数,而MyColorValues则在findcolor of FindColor中用作FindColor的输入参数。
在FindColor函数中,我们需要一个计数器来计数多少次,因此我们定义一个计数变量并给出其初始值0。在FindColor's for Loop中,每次绘制圆圈时都会添加计数。,我们需要将原始预设的颜色值更改为MycolorValues的值和原始的(255,0,0),将MyColorValues [Count] Soessence [Count] Soessence [count]
运行程序并测试。
蓝色的
绿色的
现在,我们获得正确的颜色和正确的值。我们需要做的是绘制这些要点以绘制运动行。我们将创建一个点列表,然后我们每次显示它时都会显示它,因此在顶部,首先创建一个称为Mypoints的列表,第一个值应该是x,第二个值应该是y,第三个值,第三个值,第三个值应该是colorid。
我们需要创建一个函数,循环mypoints列表,检查x,y和draw的值。我们能做的就是创建一个称为drawoncanvas的新功能,这需要mypoints和mycolorValues作为要通过的参数。使用点变量遍历mypoints列表,然后将图纸圆形句子写入findcolor中以进行循环,将原始x替换为point [0],然后用点[1]代替原始y,而不是使用点[2]。
因此,当我们检测到颜色时,我们需要返回FindColor函数中点的值。如果未检测到x的值,则x,y不需要返回,只需添加。在计数之前,我们可以添加判断说明。如果x和y不等于0,那么我们只需要使用附加来添加它。在这里,我们需要一个新列表变量新点。每个元素都有X.Y和计数值。每个时间x和y不等于0,添加了每个识别点。通过newpoints.append([x,y,count]),每个点都连接到形成一条线,并形成了一条线。但是该行不连续,将有一些空点,您需要在下面进行优化。同样,我们缺乏新点列表变量的初始化,因此,当初始化计数变量时,我还会初始化新点。每个周期都会定义新点,因此每个点都会更改,因此,当初始化时,新点将定义为空列表。最后,我们可以返回新点列表值。
因此,每次添加这些要点时,一旦我们将这些新点发送到While Cycle的新点变量。我们可以检查新点是否真正存在。确定新点的长度是否等于0.如果它不等于0,我们可以使用for循环将其添加到新点中。
在此处放置for循环的原因是我们在findcolor函数中返回列表变量,因此我们不能在列表中放置列表。获取列表,但是我需要的是一个要点,而不是列表。我们需要分解列表成点,因此我们需要稍后添加。如果新点的长度不是0,那么我们需要绘制它们以在画布上绘制。在这里我们调用drawoncanvas函数要调用,而两个参数则是mypoints和mycolorvalues。
在本报告中,对相机两个模块的代码测试和分析的代码测试和分析读取图像框,获取颜色,并且基本单元点。代表整个项目的成功,所以让我们调试整个项目。划出调试代码。当相机前面出现三种颜色时,应该有相应颜色的点。当对象移动时,相应的点将连接到线以显示线以实现太空的图片。单独测试红色
蓝色的
绿色的
将其放在一起进行测试
我们使用Pycharm编写和调试代码,单击“运行”按钮,然后绘制图像绘图。
(1)当绘制概述时,我们没有输出新的图像IMGRSULT,而是输出IMG,而IMG删除了CV2.Imshow(str(color [0]),掩码)。但是无法显示。IMG在WALE循环中进行IMGRESULT,然后执行代码运行测试。结果如预期所示。
(2)当在点绘制时,我们需要注意区分,因为我们输入的点是图像顶部的中心,因此当我们的图像角度不大时,我们的点会在对象上。点将在对象之外。要解决这一点,目前更棘手,因此我们不打算讨论太多的细节。现在我可以保持直截了当。现在需要更改的是,我需要显示的点颜色不应该是我们的自定义颜色,而是对象本身的颜色。
(3)在上述测试和最终图像输出中,我们获得的图像都是正面的,这与我们的运动方向相反。这不利于用户绘制空间。因此,我们需要翻转最终制作的最后一个窗口的镜子。
特定代码如下:
在确认相机成功后,Imgresult翻转180度,然后将图像分配给新值,名为New_img,最后是IMShow Display结果,也可以使用new_img输出。解决此问题后,我们还解决了另一个问题同时,即行的绘制不是很连续,而只是一个简单的集合。这与图像没有一定的关系。新图像是镜子后,该行变成了连续。是测试效果红色
蓝色的
绿色的
首先,我们需要在Pycharm中找到运行按钮,并且位置在右上角以成为绿色三角形。
单击绿色三角形以运行程序。等待一段时间,将出现一个相机选择框,然后单击“选择”框中绘制在选择框中。
根据《镜报》,您可以直接绘制绘画,并使用不同的颜色绘制RGB的三个单词。
最后,Q退出了。如果是中文输入模式,请切换到英语模式以进行退出。
在测试中,我们发现,由于手的颜色更接近橙色,因此,当识别手的颜色可能被识别为红色,导致红色的位置不应该存在。根据颜色识别模块进行优化,或者您可以添加一个新功能以优化标识的准确性。在运行过程中,输入窗口的第一个颜色对象将产生一点,并且无法识别和连接立即到达一行。我们认为这也需要后续优化。在本报告中,可以实现一个简单的空间。
Python是一种面向对象的,翻译计算机程序设计语言。我们认为Python的突出位置将非常灵活,简单和清晰,简单的Grammar.python和C是相似的,并且按顺序执行。与Visual C+不同,事件触发不同的模块。该操作类似于MAT LAB。有编辑器,还有一个运行窗口(交互式解释器)。您可以在写作后运行它,也可以在命令行模式下完成下一篇文章。实验后,我了解了Python的基础知识,并最初了解了Python的基本语法和知识点。我还可以编译一个良好的操作模块。Python的实验增强了人们对未来工作的信心和我们从事实际工作的能力。对于OpenCV的学习,我们认为,最好的方法始终是阅读官方文档,然后进行许多实验测试对于开源代码。从中学到某些功能或某些算法的使用和原理,这对初学者非常重要。我们阅读官方文档的重复阅读,了解我们需要采用的功能以及如何调用功能,以及然后结合一些编写代码的示例。尽管在此过程中遇到了一些问题,但它将在一段时间内无法解决,但也将通过积极找到解决方案来解决它。一般而言,这一课的意义是非凡的。
[1] http://python.jobbole.com/ python基本教程网站。
[2] https://www.w3cschool.cn/opencv/ OpenCV官方文件。
[3] https://github.com/yuanxiaosc/deepnude-an- image-to-image-technology治疗研究所示例算法开源项目。
[4] https://github.com/asabeneh/30-days-python Python开源学习项目。
[5] Liu Ruizhen,Yu Shiqi .otencv教程基础文章[M]北京:北京:北京航空航天大学出版社。2007。
[6] g。Bradski,OpenCV库[M] .ResearchGate:Cinii,2000年。
[7] Zhang Jiwen.C ++编程基金会[M]。北京:高等教育出版社。2003。
[8] Hou Junjie,在-Depth MFC [M]中。武汉:瓦兹港科学技术出版社。2001。
[9]冈萨雷斯数字图像处理(第二版)[M]。北京:电子行业出版社。2005。
[10] Yu Shiqi翻译,学习OpenCV(中文版)[M]。北京:Tsinghua大学出版社。2009。