漫水填充算法
❶ 如何识别图片扑克牌数字导入表格
您可以通过OpenCV识别图片扑克牌数字导入表格。
完成一张扑克牌的识别主要步骤有:从摄像头获取扑克牌图片,二值化后查找图片最外层轮廓,并截取出轮廓内部的图片,即拍摄的扑克牌。使用霍夫线检测和旋转来标定扑克牌位置并截取,比通过查找轮廓标定更准确,对背景环境要求也更低。使用漫水填充算法把扑克牌四周的多余的背景变成和扑克牌牌面背景一样的白色像素。此时图片只剩白色背景以及黑色的扑克牌数字、花色、头像等,再查找最左上角轮廓并截取出,这就是扑克牌的数字。从余下的图片中再查找最左边的轮廓并截取出,这就是扑克牌的花色。可以将数字和花色都预先保存下来,进行一些处理,放到 KNN 里进行训练得到预测模型。得到模型后就可以从1开始一套走下来自动预测识别扑克牌了。
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
❷ 微软操作系统:自带的画图工具填充是用什么算法实现的
基于扫描线的洪水填充算法
洪水填充算法 慢在需要检查周边4个点,而如果带上方向,则刚处理过的点是不需要再判断的了
如果维持算法的一致,那么步长可以增加到 3
如果采用多线程处理,则每个线程只处理一根扫描线,且只检查前进方向的一个点
❸ cvfitline用的什么算法
1、cvLoadImage:将图像文件加载至内存;
2、cvNamedWindow:在屏幕上创建一个窗口;
3、cvShowImage:在一个已创建好的窗口中显示图像;
4、cvWaitKey:使程序暂停,等待用户触发一个按键操作;
5、cvReleaseImage:释放图像文件所分配的内存;
6、cvDestroyWindow:销毁显示图像文件的窗口;
7、cvCreateFileCapture:通过参数设置确定要读入的AVI文件;
8、cvQueryFrame:用来将下一帧文件载入内存;
9、cvReleaseCapture:释放CvCapture结构开辟的内存空间;
10、cvCreateTrackbar:创建一个滚动条;
11、cvSetCaptureProperty:设置CvCapture对象的各种属性;
12、cvGetCaptureProperty:查询CvCapture对象的各种属性;
13、cvGetSize:当前图像结构的大小;
14、cvSmooth:对图像进行平滑处理;
15、cvPyrDown:图像金字塔,降采样,图像缩小为原来四分之一;
16、cvCanny:Canny边缘检测;
17、cvCreateCameraCapture:从摄像设备中读入数据;
18、cvCreateVideoWriter:创建一个写入设备以便逐帧将流写入文件;
19、cvWriteFrame:逐帧将流写入文件;
20、cvReleaseVideoWriter:释放CvVideoWriter结构开辟的内存空间;
21、CV_MAT_ELEM:从矩阵中得到一个元素;
22、cvAbs:计算数组中所有元素的绝对值;
23、cvAbsDiff:计算两个数组差值的绝对值;
24、cvAbsDiffS:计算数组和标量差值的绝对值;
25、cvAdd:两个数组的元素级的加运算;
26、cvAddS:一个数组和一个标量的元素级的相加运算;
27、cvAddWeighted:两个数组的元素级的加权相加运算(alpha运算);
28、cvAvg:计算数组中所有元素的平均值;
29、cvAvgSdv:计算数组中所有元素的绝对值和标准差;
30、cvCalcCovarMatrix:计算一组n维空间向量的协方差;
31、cvCmp:对两个数组中的所有元素运用设置的比较操作;
32、cvCmpS:对数组和标量运用设置的比较操作;
33、cvConvertScale:用可选的缩放值转换数组元素类型;
34、cvCopy:把数组中的值复制到另一个数组中;
35、cvCountNonZero:计算数组中非0值的个数;
36、cvCrossProct:计算两个三维向量的向量积(叉积);
37、cvCvtColor:将数组的通道从一个颜色空间转换另外一个颜色空间;
38、cvDet:计算方阵的行列式;
39、cvDiv:用另外一个数组对一个数组进行元素级的除法运算;
40、cvDotProct:计算两个向量的点积;
41、cvEigenVV:计算方阵的特征值和特征向量;
42、cvFlip:围绕选定轴翻转;
43、cvGEMM:矩阵乘法;
44、cvGetCol:从一个数组的列中复制元素;
45、cvGetCols:从数据的相邻的多列中复制元素;
46、cvGetDiag:复制数组中对角线上的所有元素;
47、cvGetDims:返回数组的维数;
48、cvGetDimSize:返回一个数组的所有维的大小;
49、cvGetRow:从一个数组的行中复制元素值;
50、cvGetRows:从一个数组的多个相邻的行中复制元素值;
51、cvGetSize:得到二维的数组的尺寸,以CvSize返回;
52、cvGetSubRect:从一个数组的子区域复制元素值;
53、cvInRange:检查一个数组的元素是否在另外两个数组中的值的范围内;
54、cvInRangeS:检查一个数组的元素的值是否在另外两个标量的范围内;
55、cvInvert:求矩阵的逆;
56、cvMahalonobis:计算两个向量间的马氏距离;
57、cvMax:在两个数组中进行元素级的取最大值操作;
58、cvMaxS:在一个数组和一个标量中进行元素级的取最大值操作;
59、cvMerge:把几个单通道图像合并为一个多通道图像;
60、cvMin:在两个数组中进行元素级的取最小值操作;
61、cvMinS:在一个数组和一个标量中进行元素级的取最小值操作;
62、cvMinMaxLoc:寻找数组中的最大最小值;
63、cvMul:计算两个数组的元素级的乘积(点乘);
64、cvNot:按位对数组中的每一个元素求反;
65、cvNormalize:将数组中元素进行归一化;
66、cvOr:对两个数组进行按位或操作;
67、cvOrs:在数组与标量之间进行按位或操作;
68、cvRece:通过给定的操作符将二维数组简为向量;
69、cvRepeat:以平铺的方式进行数组复制;
70、cvSet:用给定值初始化数组;
71、cvSetZero:将数组中所有元素初始化为0;
72、cvSetIdentity:将数组中对角线上的元素设为1,其他置0;
73、cvSolve:求出线性方程组的解;
74、cvSplit:将多通道数组分割成多个单通道数组;
75、cvSub:两个数组元素级的相减;
76、cvSubS:元素级的从数组中减去标量;
77、cvSubRS:元素级的从标量中减去数组;
78、cvSum:对数组中的所有元素求和;
79、cvSVD:二维矩阵的奇异值分解;
80、cvSVBkSb:奇异值回代计算;
81、cvTrace:计算矩阵迹;
82、cvTranspose:矩阵的转置运算;
83、cvXor:对两个数组进行按位异或操作;
84、cvXorS:在数组和标量之间进行按位异或操作;
85、cvZero:将所有数组中的元素置为0;
86、cvConvertScaleAbs:计算可选的缩放值的绝对值之后再转换数组元素的类型;
87、cvNorm:计算数组的绝对范数, 绝对差分范数或者相对差分范数;
88、cvAnd:对两个数组进行按位与操作;
89、cvAndS:在数组和标量之间进行按位与操作;
90、cvScale:是cvConvertScale的一个宏,可以用来重新调整数组的内容,并且可以将参数从一种数
据类型转换为另一种;
91、cvT:是函数cvTranspose的缩写;
92、cvLine:画直线;
93、cvRectangle:画矩形;
94、cvCircle:画圆;
95、cvEllipse:画椭圆;
96、cvEllipseBox:使用外接矩形描述椭圆;
97、cvFillPoly、cvFillConvexPoly、cvPolyLine:画多边形;
98、cvPutText:在图像上输出一些文本;
99、cvInitFont:采用一组参数配置一些用于屏幕输出的基本个特定字体;
100、cvSave:矩阵保存;
101、cvLoad:矩阵读取;
102、cvOpenFileStorage:为读/写打开存储文件;
103、cvReleaseFileStorage:释放存储的数据;
104、cvStartWriteStruct:开始写入新的数据结构;
105、cvEndWriteStruct:结束写入数据结构;
106、cvWriteInt:写入整数型;
107、cvWriteReal:写入浮点型;
108、cvWriteString:写入字符型;
109、cvWriteComment:写一个XML或YAML的注释字串;
110、cvWrite:写一个对象;
111、cvWriteRawData:写入多个数值;
112、cvWriteFileNode:将文件节点写入另一个文件存储器;
113、cvGetRootFileNode:获取存储器最顶层的节点;
114、cvGetFileNodeByName:在映图或存储器中找到相应节点;
115、cvGetHashedKey:为名称返回一个惟一的指针;
116、cvGetFileNode:在映图或文件存储器中找到节点;
117、cvGetFileNodeName:返回文件的节点名;
118、cvReadInt:读取一个无名称的整数型;
119、cvReadIntByName:读取一个有名称的整数型;
120、cvReadReal:读取一个无名称的浮点型;
121、cvReadRealByName:读取一个有名称的浮点型;
122、cvReadString:从文件节点中寻找字符串;
123、cvReadStringByName:找到一个有名称的文件节点并返回它;
124、cvRead:将对象解码并返回它的指针;
125、cvReadByName:找到对象并解码;
126、cvReadRawData:读取多个数值;
127、cvStartReadRawData:初始化文件节点序列的读取;
128、cvReadRawDataSlice:读取文件节点的内容;
129、cvGetMoleInfo:检查IPP库是否已经正常安装并且检验运行是否正常;
130、cvResizeWindow:用来调整窗口的大小;
131、cvSaveImage:保存图像;
132、cvMoveWindow:将窗口移动到其左上角为x,y的位置;
133、cvDestroyAllWindow:用来关闭所有窗口并释放窗口相关的内存空间;
134、cvGetTrackbarPos:读取滑动条的值;
135、cvSetTrackbarPos:设置滑动条的值;
136、cvGrabFrame:用于快速将帧读入内存;
137、cvRetrieveFrame:对读入帧做所有必须的处理;
138、cvConvertImage:用于在常用的不同图像格式之间转换;
139、cvErode:形态腐蚀;
140、cvDilate:形态学膨胀;
141、cvMorphologyEx:更通用的形态学函数;
142、cvFloodFill:漫水填充算法,用来进一步控制哪些区域将被填充颜色;
143、cvResize:放大或缩小图像;
144、cvPyrUp:图像金字塔,将现有的图像在每个维度上都放大两倍;
145、cvPyrSegmentation:利用金字塔实现图像分割;
146、cvThreshold:图像阈值化;
147、cvAcc:可以将8位整数类型图像累加为浮点图像;
148、cvAdaptiveThreshold:图像自适应阈值;
149、cvFilter2D:图像卷积;
150、cvCopyMakeBorder:将特定的图像轻微变大,然后以各种方式自动填充图像边界;
151、cvSobel:图像边缘检测,Sobel算子;
152、cvLaplace:拉普拉斯变换、图像边缘检测;
153、cvHoughLines2:霍夫直线变换;
154、cvHoughCircles:霍夫圆变换;
155、cvRemap:图像重映射,校正标定图像,图像插值;
156、cvWarpAffine:稠密仿射变换;
157、cvGetQuadrangleSubPix:仿射变换;
158、cvGetAffineTransform:仿射映射矩阵的计算;
159、cvCloneImage:将整个IplImage结构复制到新的IplImage中;
160、cv2DRotationMatrix:仿射映射矩阵的计算;
161、cvTransform:稀疏仿射变换;
162、cvWarpPerspective:密集透视变换(单应性);
163、cvGetPerspectiveTransform:计算透视映射矩阵;
164、cvPerspectiveTransform:稀疏透视变换;
165、cvCartToPolar:将数值从笛卡尔空间到极坐标(极性空间)进行映射;
166、cvPolarToCart:将数值从极性空间到笛卡尔空间进行映射;
167、cvLogPolar:对数极坐标变换;
168、cvDFT:离散傅里叶变换;
169、cvMulSpectrums:频谱乘法;
170、cvDCT:离散余弦变换;
171、cvIntegral:计算积分图像;
172、cvDistTransform:图像的距离变换;
173、cvEqualizeHist:直方图均衡化;
174、cvCreateHist:创建一新直方图;
175、cvMakeHistHeaderForArray:根据已给出的数据创建直方图;
176、cvNormalizeHist:归一化直方图;
177、cvThreshHist:直方图阈值函数;
178、cvCalcHist:从图像中自动计算直方图;
179、cvCompareHist:用于对比两个直方图的相似度;
180、cvCalcEMD2:陆地移动距离(EMD)算法;
181、cvCalcBackProject:反向投影;
182、cvCalcBackProjectPatch:图块的方向投影;
183、cvMatchTemplate:模板匹配;
184、cvCreateMemStorage:用于创建一个内存存储器;
185、cvCreateSeq:创建序列;
186、cvSeqInvert:将序列进行逆序操作;
187、cvCvtSeqToArray:复制序列的全部或部分到一个连续内存数组中;
188、cvFindContours:从二值图像中寻找轮廓;
189、cvDrawContours:绘制轮廓;
190、cvApproxPoly:使用多边形逼近一个轮廓;
191、cvContourPerimeter:轮廓长度;
192、cvContoursMoments:计算轮廓矩;
193、cvMoments:计算Hu不变矩;
194、cvMatchShapes:使用矩进行匹配;
195、cvInitLineIterator:对任意直线上的像素进行采样;
196、cvSampleLine:对直线采样;
197、cvAbsDiff:帧差;
198、cvWatershed:分水岭算法;
199、cvInpaint:修补图像;
200、cvGoodFeaturesToTrack:寻找角点;
201、cvFindCornerSubPix:用于发现亚像素精度的角点位置;
202、cvCalcOpticalFlowLK:实现非金字塔的Lucas-Kanade稠密光流算法;
203、cvMeanShift:mean-shift跟踪算法;
204、cvCamShift:camshift跟踪算法;
205、cvCreateKalman:创建Kalman滤波器;
206、cvCreateConDensation:创建condensation滤波器;
207、cvConvertPointsHomogenious:对齐次坐标进行转换;
208、cvFindChessboardCorners:定位棋盘角点;
209、cvFindHomography:计算单应性矩阵;
210、cvRodrigues2:罗德里格斯变换;
211、cvFitLine:直线拟合算法;
212、cvCalcCovarMatrix:计算协方差矩阵;
213、cvInvert:计算协方差矩阵的逆矩阵;
214、cvMahalanobis:计算Mahalanobis距离;
215、cvKMeans2:K均值;
216、cvCloneMat:根据一个已有的矩阵创建一个新矩阵;
217、cvPreCornerDetect:计算用于角点检测的特征图;
218、cvGetImage:CvMat图像数据格式转换成IplImage图像数据格式;
219、cvMatMul:两矩阵相乘;
❹ kinect能不能测量长方体体积
可以。
---------------
基于Kinect 2.0深度图像的快速体积测量
作者:李玲玲1,王正勇1,卿粼波1,何海波2
2017/5/2 18:00:00
关键词: Kinect2.0深度图像 点云数据矩阵 目标提取 体积计算
摘要:为了满足现实生活中对物体体积实时测量的需求,提出了一套基于Kinect 2.0深度图像处理的快速体积测量方案。首先,使用Kinect 2.0 深度传感器获得深度图像及对应的点云数据矩阵,并对深度图像进行增强、二值化、目标提取等预处理,定位出目标物体。然后,通过像素点的统计和点云数据的处理得到目标物体的面积、高度。最后由面积和高度完成目标物体的体积计算。经验证这种方法的体积测量误差控制在3%以内,完全满足实时性的误差要求,又由于深度图像较彩色图像不易受光线、背景的干扰,使得该方法具有很强的鲁棒性。
关键词:Kinect 2.0深度图像;点云数据矩阵;目标提取;体积计算
中图分类号:TP274文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.07.011
引用格式:李玲玲,王正勇,卿粼波,等.基于Kinect 2.0深度图像的快速体积测量[J].微型机与应用,2017,36(7):35-38,42.
0引言
体积测量在现实生活中应用广泛,例如在航空运输行业中,货物入舱前需对运输货物体积有快速明确的估计,以满足飞机腹舱空间的充分利用,提高运输效率。目前机场主要是通过目测确定需运入飞机腹舱的货物体积,其精确度不够高,因此研发一套自动化体积测量系统尤为必要。现体积测量系统主要是基于激光传感器[13],但实际操作中为了获得被测物体某个面上的三维坐标信息,激光传感器需要电机等配套设备的驱动才能获取由线阵数据组成的整个物体表面的信息[1],又由于对激光传感器的扫描分辨率和灵敏度的要求,使得整个系统操作复杂,速度慢且成本高[1]。不同于传统的激光传感器得到的线阵数据,Kinect 2.0深度传感器得到的不仅是面阵数据,而且可获取物体深度信息,为此,本文主要研究基于Kinect 2.0深度图像预处理方法实现入舱前货物体积的快速实时测量。该方案优点主要体现在实现速度快,系统组成和操作简单,只需一台Kinect和一台电脑,成本低,更具有经济使用价值。
1实现方案
图1体积测量方案流程图1为体积测量方案流程。本文首先用Kinect 2.0采集深度图像及其对应的点云数据矩阵,然后采用漫水填充的方法增强图像初步去噪突出目标物体,并经过图像二值化、Canny边缘检测提取物体轮廓,图像填充提取目标物体。最后,根据Kinect 2.0视场与像素个数的比值关系得到面积,由目标物体在整个图像中的具体位置将其配准到点云数据矩阵中计算物体高度,进而求出物体体积。
2深度图像和点云数据矩阵获取
2.1深度图像获取
深度图像又叫做距离图像,类似于彩色图像矩阵中的颜色值、灰度图像矩阵中的灰度值,深度图像信息即深度值存储在深度图像矩阵中。深度图像较灰度图像的优势是,深度值只与距离相关,与光照强度和方向无关[4]。
本方案采用Kinect 2.0摄像头获取深度图像。Kinect 2.0是微软公司于2014年7月推出的高性价比摄像头。相比于传统的激光传感器,Kinect 2.0是一款功能强大、性价比高、方便使用的三维数据采集设备,图2Kinect深度图像其分辨率为512×424;水平视场可增大至70°,垂直视场增大至60°;其深度图像拍摄范围为0.8~4.0 m,图2为获取的一张深度图像。
2.2点云数据矩阵获取
点云是指以各种方式获得的点数据,是测量目标表面上各点信息的集合。坐标数据是点云数据必须包括的信息,另外法向量、颜色值或其他数据信息也可能被包括在点云数据中[5]。本方案中Kinect 2.0获取的点云数据是与其深度图像的每个像素点对应的距离信息矩阵,其大小为512行、424列,其值表示的是Kinect 2.0深度摄像头到被拍摄物体表面的垂直距离,单位为mm。经实验验证Kinect 2.0在其所能达到的距离范围0.8~4 m内的距离误差均在2 cm以内,Kinect 2.0测得距离与实际距离的比较如表1所示,由此获得的Kinect 2.0测试距离和实际距离的精度曲线如图3所示。
3深度图像预处理
由于Kinect采集的深度图像并不完美,含有与距离平方成正比的噪声及无效像素构成的空洞[6]。本文中的深度图像还有周围物体的干扰,因此对采集到的原始深度图像进行预处理对后续进一步研究尤为重要。本方案经过对深度图像的漫水填充[7]处理、基于Otsu[8]算法的图像二值化、Canny算子[9]边缘检测、图像填充等预处理方法检测定位提取出目标物体。
3.1基于漫水填充的图像增强
图像增强可弱化或消除一些不必要信息,经过增强处理的图像比原始图像更适合特定场景的需求[10]。本文首先对带目标物体的深度图像通过漫水填充,强化突出目标区域。实验证明该方法效果比较理想,基本上消除了周围噪声并突出了目标物体,为后续图像处理做准备。漫水填充法是一种常用的区域填充法,它的实质是种子填充法,经常被用来标记或分离图像的感兴趣区域。
图4漫水填充处理后的图像漫水填充法的具体操作即在具有同一颜色或亮度值的像素区域内选取种子点,通过判断种子与种子点的邻域像素颜色或亮度值的差别是否满足预先设定的阈值,来决定是否对邻域的像素用新的颜色或亮度值代替,直到遍历完区域内所有像素或达到轮廓线的边界[11]。由此可知,初始种子点、替代颜色和目标颜色判定阈值是漫水填充的3个重要参数。本文并没有填充目标区域,而是通过填充目标区域以外的区域为白色即像素值为(255,255,255)来突出黑色的目标区域,这样就简化了参数的选择。漫水填充可通过opencv中的cvFlood Fill函数来实现,选取种子点为(20,20),将下标记和上标记都选取为30,对种子的8邻域逐点进行判断,经实验验证这种参数的选取值可取得很好的效果,如图4所示。
3.2基于Otsu的图像二值化
图像增强虽然突出了目标物体但周围仍有噪声,故需对图像进行进一步的处理。接下来对漫水填充后的图像进行二值化操作以适应下一步图像处理的要求。针对目标物体与背景有较大差别的图像,为了得到理想的二值化效果,阈值分割是备受青睐的方法。因此,区分目标物体和背景的阈值对二值化效果是否理想起到关键的作用。设原始灰度图像为f(x,y),经二值化处理的图像为g(x,y),可用式(1)描述二值化过程。
g(x,y)=1,f(x,y)t
x,f(x,y)<t(1)
全局阈值法和局部阈值法是二值化的主流方法,本文采用基于Otsu算法的全局阈值法,该方法针对直方图呈明显双峰分布的图像实现效果优越,适合本文中的图像。Otsu算法可自动获取图像二值化所需要的阈值。其具体实现是以一个初始阈值t分割图像,这样就把原图像分割成C1和C2两部分,C1和C2分别为像素灰度值大于等于t和小于t的集合,之后分别求得这两部分的类间方差σ2B和类内方差σ2A,最终找出分割图像的最佳阈值t,也就是满足两个方差比σ2B/σ2A最大的阈值。分别将C1类和C2类的像素点总数设为W1和W2,其像素点灰度均值为M1和M2,方差分别为σ21和σ22。则有:
σ2B=W1W2(M1-M2)2(2)
σ2A=W1σ21+W2σ22(3)
将灰度值大于等于t的像素灰度值规定为255,小于t的像素灰度值规定为0。通过图像二值化将24 bit的深度图像转化为8 bit深度图像,以便后续对目标图像的提取。
3.3基于Canny算子边缘检测的目标提取
目标提取即把感兴趣的部分从单幅图像或序列图像中提取出来。为了从背景中提取出目标物体,采用Canny算子对二值化图像进行边缘检测。相比于其他边缘检测算子,依据图像边缘检测最优准则设计的Canny边缘检测算法具有良好的边缘检测性能,且具备信噪比大和检测精度高的优点,因此文中使用Canny算子进行边缘检测,效果如图5所示。
然后对提出的边缘进行内轮廓填充,将轮廓内的像素值填充为1,效果如图6所示,图中黑色的区域为背景,白色区域即提取出的目标物体。
4体积测量
利用统计匹配像素点及视场比值不变性的方法计算物体的体积, Kinect 2.0的视场图如图7所示。其中h是Kinect 2.0到物体表面的距离,N是图像中目标物体区域内像素个数测量值,S是物体实际面积大小;M是Kinect 2.0整个视场范围内像素的个数,S1是Kinect 2.0整个视场的面积;α和β分别是Kinect 2.0的水平视场和垂直视场。
4.1面积计算
由于Kinect 2.0采集的深度图像中保存的是深度信息,要进行体积测量还需得到面积相关的信息。当Kinect 2.0与所测物体的距离固定时,可以根据Kinect 2.0在该距离的视场范围和该视场范围内像素个数的比例关系来求取面积。即图像中目标物体区域内像素个数测量值N与实际物体的面积大小S的比值和在该距离下Kinect 2.0整个视场范围内像素的个数M与整个视场面积S1的比值是相等的,如式(4)所示:
其中N是根据图像统计出的目标物体所在区域的像素个数,即二值图像中像素值等于1的像素个数,S1可根据图7中Kinect 2.0的视场范围由几何关系求出,如式(5)所示:
又由于视场S1中总的像素个数M=512×424,利用这个原理,对于搭建好的图像采集系统,由式(4),在S1、M、N已知的情况下即可以求出目标物体区域的面积S:
4.2高度计算
统计目标物体区域即图6中的白色区域在整幅图像中的具体位置,即白色区域的起始行m1和终止行m2以及起始列n1和终止列n2,然后求出白色区域的中间行m和中间列n,并将其配准对应到点云矩阵A1和A,即在A1和A中提取出白色区域对应的距离信息。由于得到的Kinect 2.0摄像头到背景表面和到目标物体表面的两个点云矩阵A1和A边缘有噪声,因此选取A1和A中20×20的中间区域的小矩阵,即行m-10至m+9和列n-10至n+9的区域分别求平均值得到h1和h。通过背景距离减去前景距离计算被测物的高度信息h2,计算公式为:
h2=h1-h(7)
4.3体积计算及实验测试
由体积计算公式V=Sh2,即可计算出被测物的体积。
分别对不同的物体和0.8~4 m不同的距离(Kinect 2.0到被测物的距离)进行了实验,尽管被测对象的体积很小,但误差均有良好的可控性,结果显示控制在3%以内,这充分说明了该方案的潜力和可行性。具体测量结果及误差分析如表2所示。
5结论
本文基于VS2013环境和Kinect SDK 2.0提出一套体积测量方案,实验证明本文提出的测量方案测量结果准确可靠,3%以内的体积测量误差可满足实时的需求。
(1)本文应用Kinect 2.0深度图像的处理来求体积,充分利用了深度图像较彩色图像不易受光照强度和方向影响的优势,增强了本文提出算法的鲁棒性。
(2)本文设计的体积测量方案成本低,经济实惠,不需要配套的硬件驱动,所需设备仅为一台电脑和一台Kinect 2.0,性价比高,操作简单便捷,并且可实现快速准确实时的体积测量,经济价值可观。
(3)本文将Kinect 2.0的应用由尺寸测量进一步深入到体积测量领域,增强了Kinect 2.0的实用性,拓展了Kinect 2.0的应用领域,对计算视觉技术在体积测量领域的应用具有积极意义。
参考文献
[1] 路达, 滕奇志, 卿粼波,等. 基于激光测距的中小型货物三维体积扫描[J]. 微型机与应用, 2015,34(23):83-86.
[2] 周峰. 基于三维激光扫描技术的仓储散粮堆体积测量系统研究[D].长春:吉林大学,2015.
[3] 雷文. 基于激光扫描的物料堆三维测量系统研究[D].长沙:湖南大学,2014.
[4] Yue Haosong, Chen Weihai, Wu Xingming, et al. Fast 3D modeling in complex environments using a single Kinect sensor[J]. Optics and Lasers in Engineering, 2014, 53(2): 104-111.
[5] 韦羽棉. 基于 Kinect 深度图像的三维重建研究[D].重庆:重庆大学, 2014.
[6] 陈理. Kinect 深度图像增强算法研究[D]. 长沙:湖南大学, 2013.
[7] BRADSKI G, KAEBLER A.Learning OpenCV[M].California:0’Reilly Media,Inc,2008.
[8] OTSU N. A threshold selection method from graylevel histogram [J]. IEEE Transactions on Systems, Man, and Cybernetics, 1979, 9(1): 62-66.
[9] CANNY J. A computational approach to edge detection[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 1986, 8(6):679-698.
[10] Li Bai, Li Ya, Cao Hongxin, Fet al. Image enhancement via lateral inhibition: an analysis under illumination changes[J]. OptikInternational Journal for Light and Electron Optics, 2016, 127(12): 5078-5083.
❺ 视频分析里面的漫水线算法怎么用
flood fill算法?
这个算法主要用于填充图像的区域,要先指定一个种子点,可以把邻近区域的类似点填充上同样的颜色
❻ 计算机图形学问题:请高手帮忙看一下
程序没错的话有两个原因:1.是你用VC编译的,但是VC不支持graphics.h,也没有graphics.h这个文件,因为它不是标准头文件,所以建义用tuoboC编译器,或者用WinTC编译器也可以。2.因为initgraph(&gd, &gm, ""); 这里表示在和可执行文件里包含一个.bgi文件(这个文件在tuoboC或WinTC里都有,你可以找一下)但是你没包含进去,所以没有画出来,而且执行时会报错。
那就是你没有先画出边界,所以在函数里判断出错,没有递归。
boundary_fill_4(x1, y1, boundary_color, fill_color);
boundary_fill_4(x2, y2, boundary_color, fill_color);
boundary_fill_4(x3, y3, boundary_color, fill_color);
boundary_fill_4(x4, y4, boundary_color, fill_color);
boundary_fill_4(x5, y5, boundary_color, fill_color);
boundary_fill_4(x6, y6, boundary_color, fill_color);
上面这里是没用的,你应该先画出边界,然后再调用boundary_fill_4函数,而且在main()函数里只调用boundary_fill_4一次就够了,其中x,y是多边形内的一个点坐标。
OK?
❼ 行至漫水路段时,应当怎样做
行至漫水路段时,应当低速通过涉水路段。
《中华人民共和国道路交通安全法实施条例》第四章道路通行规定,第一节一般规定,第六十四条:机动车行经漫水路或者漫水桥时,应当停车察明水情,确认安全后,低速通过。机动车行经渡口,应当服从渡口管理人员指挥,按照指定地点依次待渡。机动车上下渡船时,应当低速慢行。
(7)漫水填充算法扩展阅读:
国务院根据《中华人民共和国道路交通安全法》制定《中华人民共和国道路交通安全法实施条例》,于2004年4月28日国务院第49次常务会议通过的国家法规,2004年4月30日公布,自2004年5月1日起施行。共计8章115条。
2017年10月7日,国务院总理李克强签署第687号国务院令,对《中华人民共和国道路交通安全法实施条例》进行了修改。
参考资料来源:网络——中华人民共和国道路交通安全法实施条例
❽ 学习OpenCV(中文版)的作品目录
出版前言译者序写在前面的话前言第1章 概述什么是OpenCVOpenCV的应用领域什么是计算机视觉OpenCV的起源下载和安装OpenCV通过SVN获取最新的OpenCV代码更多OpenCV文档OpenCV的结构和内容移植性练习第2章 OpenCV入门开始准备初试牛刀—— 显示图像第二个程序—— 播放AVI视频视频播放控制一个简单的变换一个复杂一点的变换从摄像机读入数据写入AVI视频文件小结练习第3章 初探OpenCVOpenCV的基本数据类型CvMat矩阵结构IplImage数据结构矩阵和图像操作绘图数据存储集成性能基元小结练习第4章 细说HighGUI一个可移植的图形工具包创建窗口载入图像显示图像视频的处理ConvertImage函数练习第5章 图像处理综述平滑处理图像形态学漫水填充算法尺寸调整图像金字塔阈值化练习第6章 图像变换概述卷积梯度和Sobel导数拉普拉斯变换Canny算子霍夫变换重映射拉伸、收缩、扭曲和旋转CartToPolar与PolarToCartLogPolar离散傅里叶变换(DFT)离散余弦变换(DCT)积分图像距离变换直方图均衡化练习第7章 直方图与匹配直方图的基本数据结构访问直方图直方图的基本操作一些更复杂的策略练习第8章 轮廓内存序列查找轮廓Freeman链码轮廓例子另一个轮廓例子深入分析轮廓轮廓的匹配练习第9章 图像局部与分割局部与分割背景减除分水岭算法用Inpainting修补图像均值漂移分割Delaunay三角剖分和Voronoi 划分练习第10章 跟踪与运动跟踪基础寻找角点亚像素级角点不变特征光流mean-shift和camshift跟踪运动模板预估器condensation算法练习第11章 摄像机模型与标定摄像机模型标定矫正一次完成标定罗德里格斯变换练习第12章 投影与三维视觉投影仿射变换和透视变换POSIT:3D姿态估计立体成像来自运动的结构二维和三维下的直线拟合练习第13章 机器学习什么是机器学习OpenCV机器学习算法Mahalanobis距离K均值朴素贝叶斯分类二叉决策树boosting随机森林人脸识别和Haar分类器其他机器学习算法练习第14章 OpenCV的未来过去与未来发展方向OpenCV与艺术家后记参考文献索引关于作者和译者封面图片
❾ 漫灌的方式
漫灌是一种粗放的灌溉方式,其法为不平整土地,也不筑畦,让水顺着坡地往里流。 漫灌的方式 1、本意上,可以说粗放的农业灌溉,而浇灌、滴灌、喷灌、微灌的方式都比漫灌节水。高科技水肥一体化模式则是目前现代农业最为节水的一种方式了。 根据网络的科学定义是: 中文名称:漫灌英文名称:flooding irrigation定义:田间不修沟、畦,水流在地面以漫流方式进行的灌溉,多用于牧草灌溉。应用学科:水利科技(一级学科);灌溉与排水(二级学科);灌溉(水利)(二级学科) flood irrigation漫灌是在田间不做任何沟埂,灌水时任其在地面漫流,借重力作用浸润土壤,是一种比较粗放的灌水方法。灌水的均匀性差,水量浪费较大。漫灌 mànguàn[basin irrigation] 围绕着农田筑堤,使其形成一个坑塘,并且引水漫流地上以灌溉农田◎ 漫灌 mànguàn[flow;flood irrigation] 任水顺坡漫流的一种粗放灌溉方式漫灌田地当今水是一种资源,人们采取了网络喷灌作业方式,改变了传统的浇灌方法。水送到田间以后,如何浇灌是大有学问的。不少地方的农民仍然固守着旧的观念,认为浇地就是浇灌“地”,要浇足浇够水,于是沿袭几千年来的传统办法,采取大水漫灌,浇地时,把整个田块都放满水。如果田间土地不平整,高高低低,要使地块都漫上水,所用水量就要更大。其实浇地的目的是让庄稼根部获得和保持必需的水量,浇其余地方完全没的必要,浇很深的水更是巨大的浪费。 现代农业节水灌溉得到逐步推广,灌溉三块同样大的试验田,第一块用漫灌方式,第二块用灌溉方式,第三块用滴灌方式,后两种方式用水量分别是漫灌的25%和15%,三块地共用水420吨。设漫灌为X吨,则灌溉为0.25X,滴灌为0.15X X+0.25X+0.15X=420,解X=300,则漫灌为300吨,灌溉为75吨,滴灌为45吨。如果应用水肥一体化微灌节水农业技术,则只需用15-30吨。所以现代农业必须改变大水漫灌的方式。 漫灌的方式 浇灌、滴灌、喷灌的方式比漫灌的方式节水抗旱,节约水资源 结合测土配方施肥的水肥一体化模式比浇灌滴灌喷灌高节能环保优质高产 中国高效灌溉及水肥一体化技术,是完全取代大水漫灌的传统粗放的灌溉方式的新技术成果 2、引申义什么是漫灌效应 漫灌效应:漫灌是一种粗放的灌溉方式,其法为不平整土地,也不筑畦,让水顺着坡地往里流。 点评:只想自然而然,必会听之任之。 漫灌效应概述 漫灌效应作为一种特殊的思想灌输方式,常常成为企业员工教育的首选。“漫灌是一种粗放的灌溉方式,其法为不平整土地,也不筑畦,让水顺着坡地往里流。”,漫灌效应原引自生物学常识,把对植物的灌溉方式借鉴到员工的教育上来,的确是一种睿智、高明之举。 任何一个企业的员工,如果缺少适时的企业文化灌输,精神势必荒芜,就像没有雨露滋润的作物将逐渐枯萎。众多的企业中,员工因缺少教育而产生的无知、颓废、落后的情况十分普遍,他们的素质很成问题,充其量只是体力型的打工仔,难以与现代科技水准保持同步,直接影响到公司的业绩和进步。当然,这与一些老板缺乏企业文化理念,忽视员工的教育也不无关系,更重要的还是找不到一种适合的员工教育方式。 老板之所以抓不好员工的教育,肯定与企业员工教育的难度有关,毕竟,企业本身不是学校、政府部门,也不是父母呵护的家庭。在繁忙的产生经营压力下,企业公司几乎不具备时间和条件来做好员工的教育工作,所以很多企业管理者难免忽视这项员工教育工作,只有有远见的老板才会重视、兼顾对员工的思想和知识灌输。 企业员工教育,缺少时间和条件,不等于没有时间和条件。重视教育和忽视教育又是两个完全不同的态度,而能够从企业自身的特点出发,找到一种适合员工的教育方式——漫灌效应更为难能可贵。 漫灌效应是一种顺其自然的原始灌输方式,农夫只在田地的一端打开一道供水流入的口子,把山溪的或者河流的水引入田野即可,基本不需要什么复杂的操作,省略了平整土地、筑畦、均匀喷洒等工序,节约了大量的时间,让水流进去就完事,剩下的事情就是自然而然,听之任之。这种灌溉方式可以追溯到远古时代自给自足的小农经济。农民每逢需要给作物灌溉的时候,就在田头用锄头挖开一道入水口,尽管放任自流。别看这种笨拙的漫灌方式落后,因了农民不忘在田头随便那么挖一道入水口,雨水、山水、河水就顺势汩汩而流,田里的奇花异草都神奇的争艳,青蛙声也此起彼伏,庄稼自然长势喜人。 同样,我们对难度较大的企业员工教育工作,也不必把它看得太难,只要像农民伯伯那样在田头用锄头挖一道入水口就行啦。企业公司的老板不妨尝试这样做:在单位的空坪、走廊多开设几个报刊栏,做得漂亮一点,有顶棚,要考虑晴雨天都可以方便员工浏览,内容要有娱乐性、可读性;腾出几间房子做阅览室,可供员工休闲的任意时间来室内看报读书,甚至“按需分配”免费提供一些与生产经营、专业知识相关的书籍;也腾出几间房子做电脑室,配置像网吧那样的大众化电脑,员工要查个资料,看个网页,写个博客,发个电子邮件,或者放松一下自己,听听音乐看看网络电影什么的,都随时可以做到;再定期的展开一些企业文化活动,比如象棋比赛、篮球比赛、书法比赛、舞蹈比赛、歌咏比赛、武术比赛等等,只要员工爱好的喜闻乐见的都尽可能利用大家的休闲时间来充实,把它当作一件随意的但又当真的事情去做。我想:一家公司能够注重这些细微的“田头放水”工作,把企业文化之水引进公司,不强迫员工要学习什么,没有任务,只有漫灌,所产生的效应却是十分强大的。员工能够得到这样的漫灌,效果甚至不亚于刻意、严谨的专业教育。 有心栽花花不活,无意插柳柳成荫。这应该是漫灌效应的一个显着特征。漫灌,看似没有怎么强求,有时收到的教育效果却比那种严厉的用心教育还要好。尤其员工完全在一种放松自然的自己选择和做主的状态下去吸收思想知识的养料,其和谐与愉快可以使这样的教育方式持久不衰。 这种粗放的漫灌方式,管理者省时还省力,企业要支付的只是一些书报费、设施费用和相关活动经费,钱肯定要花一点的,这个钱千万不能省,更不能吝啬。要知道花在这上面的钱特别有潜在的收益,而且是无法估量的收益。一个个员工不仅在公司里也能够给自己充电,而且综合素质的在潜移默化地改善和提高,还排除了闲暇无事可做、无处消遣所带来的种种不利因素。 最原始的漫灌方式也许正是最佳的员工教育方案,员工因得到广博的知识文化的阳光雨露滋润而生机勃勃,他们的才华、技能、潜质、智慧、精神都会得以开发,产生强大的漫灌效应,最后带动整个企业公司的飞跃。而对于每一个个案,则科学地采取浇灌、滴灌、喷灌和微灌方式,更为节能环保,更有效,能够创造更大的辉煌。 参考资料 网络 网络知道 中新科技 现代农业 可喜可贺
记得采纳啊
❿ 学习OpenCV的作品目录
出版前言
译者序
写在前面的话
前言
第1章 概述
什么是OpenCV
OpenCV的应用领域
什么是计算机视觉
OpenCV的起源
下载和安装OpenCV
通过SVN获取最新的OpenCV代码
更多OpenCV文档
OpenCV的结构和内容
移植性
练习
第2章 OpenCV入门
开始准备
初试牛刀—— 显示图像
第二个程序—— 播放AVI视频
视频播放控制
一个简单的变换
一个复杂一点的变换
从摄像机读入数据
写入AVI视频文件
小结
练习
第3章 初探OpenCV
OpenCV的基本数据类型
CvMat矩阵结构
IplImage数据结构
矩阵和图像操作
绘图
数据存储
集成性能基元
小结
练习
第4章 细说HighGUI
一个可移植的图形工具包
创建窗口
载入图像
显示图像
视频的处理
ConvertImage函数
练习
第5章 图像处理
综述
平滑处理
图像形态学
漫水填充算法
尺寸调整
图像金字塔
阈值化
练习
第6章 图像变换
概述
卷积
梯度和Sobel导数
拉普拉斯变换
Canny算子
霍夫变换
重映射
拉伸、收缩、扭曲和旋转
CartToPolar与PolarToCart
LogPolar
离散傅里叶变换(DFT)
离散余弦变换(DCT)
积分图像
距离变换
直方图均衡化
练习
第7章 直方图与匹配
直方图的基本数据结构
访问直方图
直方图的基本操作
一些更复杂的策略
练习
第8章 轮廓
内存
序列
查找轮廓
Freeman链码
轮廓例子
另一个轮廓例子
深入分析轮廓
轮廓的匹配
练习
第9章 图像局部与分割
局部与分割
背景减除
分水岭算法
用Inpainting修补图像
均值漂移分割
Delaunay三角剖分和Voronoi 划分
练习
第10章 跟踪与运动
跟踪基础
寻找角点
亚像素级角点
不变特征
光流
mean-shift和camshift跟踪
运动模板
预估器
condensation算法
练习
第11章 摄像机模型与标定
摄像机模型
标定
矫正
一次完成标定
罗德里格斯变换
练习
第12章 投影与三维视觉
投影
仿射变换和透视变换
POSIT:3D姿态估计
立体成像
来自运动的结构
二维和三维下的直线拟合
练习
第13章 机器学习
什么是机器学习
OpenCV机器学习算法
Mahalanobis距离
K均值
朴素贝叶斯分类
二叉决策树
boosting
随机森林
人脸识别和Haar分类器
其他机器学习算法
练习
第14章 OpenCV的未来
过去与未来
发展方向
OpenCV与艺术家
后记
参考文献
索引
关于作者和译者
封面图片