怎么使用matlib把直方图的顶点中点连接任意四边形的中点成曲线

matlib读数内存_中华文本库
利用MATLAB的GUI实现输入实验数据的检验与存取_计算机软件及应用_IT/计算机_专业资料...包括 仪器 读数 的检验 以及有 效数 字 的运 算可以通过 图形用 户界 面...
基于MATLAB_Robotics工具箱的工业机器人轨迹规划及仿真研究 - 制造业信息化 仿真 / 建模 / CAD/ CAM/ CAE/ CAPP MANUFACTURING INFORMAT...
彩色数码管读数识别软件设计_IT/计算机_专业资料。matlab 软件彩色数字仪表表盘读数...优秀产品经理指南 DTCC2014:百分点内存数... 百度认证SEM02关键词优化...1...
②通过 matlab 可实现图片的预处理以及指针识别读数识别,读取的数据相 对准确 ③通过 labview 可以成功的调用 matlab 函数,并实现函数的功能,通过 labview 搭建的...
指针式仪表读数识别系统研究_信息与通信_工程科技_专业资料。matlab指针式仪表读数识别系统研究Researchon ReadingRecognitionSystemofIndex—instrument 崔行巨’段会川CU|...
干涉法测量透镜的曲率半径 matlab_物理_自然科学_专业资料。matlab 在物理实验中...了解读数显微镜的结构和使用方法; 2.掌握牛顿环测平凸透镜曲率半径的方法; 3....
DataprocessinginMatlab_信息与通信_工程科技_专业资料。matlab技术2005...它可以从文件中任何一个点 开始读数 ,下次读数总是从上一次停止的那一点开始...
matlab教程 - 数学实验 Experiments in Mathematics 清华大学数学科学系 为什么要开设数学实验课 既要学好算数学, 更要培养用数学的能力 利...您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
Matlab应用图像处理.ppt 35页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
Matlab应用图像处理 Matlaby基本知识 Matlaby图像文件格式 BMP(Windows Bitmap) Windows通用文件格式 JPEG(Joint Photographic Experts Group) 高度压缩的图像文件格式 TIFF(Tagged Image File Format) 主要适用于排版印刷 PCX(Windows Paintbrush) PNG(Portable Network Graphics) HDF(Hierarchical Data Format) XWD(X Windows Dump) GIF(Graphics Interchange Format)
Matlab基本知识 Matlab图像类型 索引图像 直接把像素值作为RGB调色板下标的图像。包括一个数据矩阵及一个颜色映像矩阵。 灰度图像 是包含灰度级(量度)的图像。仅包含一个数据矩阵,其中数据矩阵中的每一个数据代表了一定范围内的灰度值。(0~255) RGB图像 真彩图像。用RGB三原色表示图像色彩信息。 二进制图像 显示黑、白信息的图像。每一个像素值由三个数值来指定红、绿和蓝颜色分量。需要一个数据矩阵,每个像素只取两个灰度值。 图像示例 图像文件读取 函数imread可以从任何Matlab支持的图像文件格式中以任意位深度读取一幅图像。 [X,MAP]=imread(Filename,’FMT’) Filename:读入的文件名。 FMT为图像格式,如果不指定FMT参数,系统将根据文件名自动判断图像类型。 输出参数X:存储图像数据的矩阵名。 MAP:当图像为索引图像时,MAP为该图像的调色板。 Example: RGB=imread(‘flowers.tif’) I=imread(‘moon.tif’) [X,map]=imread(‘canoe.tif’)
图像文件的写入(保存) 函数imwrite可以将一幅图像写成一个Matlab支持的格式图像文件。 Imwrite(X,MAP,Filename,’FMT’) X:图像变量名 MAP:调色板 Filename:输出文件名 FMT:指定的存储格式 Example: Imwrite(I,’Test.bmp’) Imwrite(I,’clown.png’,’BitDepth’,4) 图像文件的显示 函数imshow可以自动对读入的图像进行调整显示,以获得最佳的显示效果。 Imshow(I,[low high]) I:待显示的图像 [low high]:图像数据的值域 显示灰度图像 Imshow(I,[100 200]) 显示二值图像 Imshow(BW) 显示索引图像 Imshow(X,map) 显示真彩图像 Inshow(RGB)
图像显示举例 Example: BW1=zeors(20,20); BW1(2:2:18,2:2:18)=1; Imshow(BW1,’notruesize’); Imshow(~BW1,’ notruesize’); Imshow(I,[100,200]); 利用不同的窗体显示图像 F Imshow(~BW1,’ notruesize’);
图像增强-直方图处理 直方图显示函数 Imhist(I,level) I:图像矩阵 Level:灰度级数 直方图均衡函数 Histeq(I) I:待均衡的图像矩阵 直方图均衡举例 I=imread(‘tire.tif’); 读取图像 J=histeq(I); 直方图均衡图像 Imshow(I); 显示原图像 Figure,imshow(J); Figure,imshow(I,64); 显示图像的直方图 Figure,imshow(J,64);
心血管造影(图像剪影) Orgin=imread(‘orgin.bmp’); Mask=imread(‘mask.bmp’); Result=imsubtract(orgin,mask); Figure,imshow(orgin); Figure,imshow(result); 图像求反运算 [m,n]=size(orgin); orgintemp=double(orgin); for i=1:m
%转换矩阵的每个像素
f=orgintemp(i,j);
if(f&=0)&(f&=255)
g(i,j)=y-k*f;
end Eimshow(mat2gray(g)); 图像的插值缩放 通过函数imresize来实现对图像的放大和缩小。 插值方法可以采用 最近邻
正在加载中,请稍后...OpenCv轮廓高级应用(轮廓匹配,几何直方图)
&&&最近再次用到了opencv轮廓,在这里结合作者冰山一角的博客()以及自己的体会在此稍加说明。其程序主要参见冰山一角的Blog,遗憾的是代码是OpenCV1.0写的,等有时间再用2.4.2改写一篇。
&&&&对于轮廓的相关数据结构表示和几本操作(查找轮廓,画轮廓),可参见前面两片关于轮廓的例程,在这里不多讲。
&&&对于查找轮廓我们一般要对图像Canny检测。但是对于很特殊的场合其实我们还可以直接对二值化的图像进行轮廓的提取,找出的轮廓其实就是Blob(这个可能就是为什么OpenCV高版本里面把blob分析抛弃的原因吧,我猜的话),画上外截矩形就是一个ROI,是不是觉得很有用?下面介绍罗阔的高级应用。
&&&轮廓的特性:
1.轮廓的多边形逼近&&&&轮廓的多边形逼近指的是:使用多边形来近似表示一个轮廓。
&&&&多边形逼近的目的是为了减少轮廓的顶点数目。
&&&&多边形逼近的结果依然是一个轮廓,只是这个轮廓相对要粗旷一些。
&&&可以使用方法cvApproxPoly()
2.轮廓的关键点&&&&轮廓的关键点是:轮廓上包含曲线信息比较多的点。关键点是轮廓顶点的子集。
&&&&可以使用cvFindDominantPoints函数来获取轮廓上的关键点,该函数返回的结果一个包含
关键点在轮廓顶点中索引
的序列。再次强调:是索引,不是具体的点。如果要得到关键点的具体坐标,可以用索引到轮廓上去找。3.轮廓的周长和面积
&&&&轮廓的周长可以用cvContourPerimeter或者cvArcLength函数来获取。
&&&&轮廓的面积可以用cvContourArea函数来获取。
4.轮廓的边界框&&&&有三种常见的边界框:矩形、圆形、椭圆。
&&&&(1)矩形:在图像处理系统中提供了一种叫Rectangle的矩形,不过它只能表达边垂直或水平的特例;OpenCv中还有一种叫Box的矩形,它跟数学上的矩形一致,只要4个角是直角即可。
&&&&如果要获取轮廓的Rectangle,可以使用cvBoundingRect函数。
&&&&如果要获取轮廓的Box,可以使用cvMinAreaRect2函数。
&&&&(2)圆形
&&&&如果要获取轮廓的圆形边界框,可以使用cvMinEnclosingCircle函数。
&&&&(3)椭圆
&&&&如果要获取轮廓的椭圆边界框,可以使用cvFitEllipse2函数。
5.轮廓的矩
&&&&矩是通过对轮廓上所有点进行积分运算(或者认为是求和运算)而得到的一个粗略特征。
在连续情况下,图像函数为&f(x,y),那么图像的p+q阶几何矩(标准矩)定义为:
,q = 0,1,2……&
p+q阶中心距定义为:
= 0,1,2……
其中和代表图像的重心,
对于离散的数字图像,采用求和号代替积分:
= 0,1,2 ……
N和M分别是图像的高度和宽度;
归一化的中心距定义为:;其中
在公式中,p对应x维度上的矩,q对应y维度上的矩,阶数表示对应的部分的指数。该计算是对轮廓界上所有像素(数目为n)进行求和。如果p和q全部为0,那么m00实际上对应轮廓边界上点的数目。
虽然可以直接计算出轮廓的矩,但是经常会用到归一化的矩(因此不同大小但是形状相同的物体会有相同的值)。同样,简单的矩依赖于所选坐标系,这意味着物体旋转后就无法正确匹配。
于是就产生了Hu矩以及其他归一化矩的函数。
Hu矩是归一化中心矩的线性组合。之所以这样做是为了能够获取代表图像某个特征的矩函数。这些矩函数对缩放,旋转和镜像映射出了(h1)具有不变性。
Hu矩是从中心矩中计算得到。即七个由归一化中心矩组合成的矩:&&
&其中中心矩和归一化中心矩的定义为:
&&&我们可以使用cvContoursMoments函数、cvMoments函数方便的得到轮廓的矩集,然后再相应的方法或函数获取各种矩。
&&&&特定的矩:cvGetSpatialMoment函数
&&&&中心矩:cvGetCentralMoment函数
&&&&归一化中心矩:cvGetNormalizedCentralMoment函数
&&&&Hu矩:cvGetHuMoments函数
6.轮廓的轮廓树&&&&轮廓树用来描述某个特定轮廓的内部特征。注意:轮廓树跟轮廓是一一对应的关系;轮廓树不用于描述多个轮廓之间的层次关系。
&&&&轮廓树的创建过程:
&&&&从一个轮廓创建一个轮廓树是从底端(叶子节点)到顶端(根节点)的。首先搜索三角形突出或者凹陷的形状的周边(轮廓上的每一个点都不是完全和它的相邻点共线的)每个这样的三角形被一条线段代替,这条线段通过连接非相邻点的两点得到;因此实际上三角形或者被削平或者被填满。每个这样的替换都把轮廓的顶点减少,并且给轮廓树创建一个新节点。如果这样的一个三角形的两侧有原始边,那么她就是得到的轮廓树的叶子;如果一侧已是一个三角形,那么它就是那个三角形的父节点。这个过程的迭代最终把物体的外形简称一个四边形,这个四边形也被剖开;得到的两个三角形是根节点的两个子节点。
结果的二分树最终将原始轮廓的形状性比编码。每个节点被它所对应的三角形的信息所注释。
这样建立的轮廓树并不太鲁棒,因为轮廓上小的改变也可能会彻底改变结果的树,同时最初的三角形是任意选取的。为了得到较好的描述需要首先使用函数cvApproxPoly()之后将轮廓排列(运用循环移动)成最初的三角形不怎么收到旋转影响的状态。
&&&&可以用函数cvCreateContourTree来构造轮廓树。
&7.轮廓的凸包和凸缺陷&&&&轮廓的凸包和凸缺陷用于描述物体的外形。凸包和凸缺陷很容易获得,不过我目前不知道它们到底怎么使用。
&&&&如果要判断轮廓是否是凸的,可以用cvCheckContourConvexity函数。
&&&&如果要获取轮廓的凸包,可以用cvConvexHull2函数,返回的是包含顶点的序列。
&&&&如果要获取轮廓的凸缺陷,可以用cvConvexityDefects函数。
&8.轮廓的成对几何直方图&&&&成对几何直方图(pairwise
geometrical histogram PGH)是链码编码直方图(chain code histogram
CCH)的一个扩展或者延伸。CCH是一种直方图,用来统计一个轮廓的Freeman链码编码每一种走法的数字。这种直方图的一个优良性质为当物体旋转45度,那么新直方图是老直方图的循环平移。这样就可以不受旋转影响。
&&&&(1)轮廓保存的是一系列的顶点,轮廓是由一系列线段组成的多边形。对于看起来光滑的轮廓(例如圆),只是线段条数比较多,线段长度比较短而已。实际上,电脑中显示的任何曲线都由线段组成。
&&&&(2)每两条线段之间都有一定的关系,包括它们(或者它们的延长线)之间的夹角,两条线段的夹角范围是:(0,180)。
&&&&(3)每两条线段上的点之间还有距离关系,包括最短(小)距离、最远(大)距离,以及平均距离。最大距离我用了一个偷懒的计算方法,我把轮廓外界矩形的对角线长度看作了最大距离。
&&&&(4)成对几何直方图所用的统计数据包括了夹角和距离。
轮廓的匹配
&&&&如果要比较两个物体,可供选择的特征很多。如果要判断某个人的性别,可以根据他(她)头发的长短来判断,这很直观,在长发男稀有的年代准确率也很高。也可以根据这个人尿尿的射程来判断,如果射程大于0.50米,则是男性。总之,方法很多,不一而足。
&&&&我们在上文中得到了轮廓的这么多特征,它们也可以用于进行匹配。典型的轮廓匹配方法有:Hu矩匹配、轮廓树匹配、成对几何直方图匹配。
1.Hu矩匹配
&&&&轮廓的Hu矩对包括缩放、旋转和镜像映射在内的变化具有不变性。cvMatchShapes函数可以很方便的实现对2个轮廓间的匹配。
2.轮廓树匹配
&&&&用树的形式比较两个轮廓。cvMatchContourTrees函数实现了轮廓树的对比。
3.成对几何直方图匹配&&&&在得到轮廓的成对几何直方图之后,可以使用直方图对比的方法来进行匹。
轮廓匹配源码1:
轮廓匹配源码1
&&&&IplImage*
img_8uc1 = cvLoadImage("flower.jpg",CV_LOAD_IMAGE_GRAYSCALE);
&&&&IplImage*
img_edge1 = cvCreateImage(cvGetSize(img_8uc1),8,1);
&&&&IplImage*
img_8uc3 = cvCreateImage(cvGetSize(img_8uc1),8,3);
&&&&cvThreshold(img_8uc1,img_edge1,128,255,CV_THRESH_BINARY);
&&&&CvMemStorage*
storage1 = cvCreateMemStorage();
&&&&CvSeq*
first_contour1 = NULL;
Nc = cvFindContours(
&&&&&&&&img_edge1,
&&&&&&&&storage1,
&&&&&&&&&first_contour1,
&&&&&&&&sizeof(CvContour),
&&&&&&&&CV_RETR_LIST
&&&&&&&&);
&&&&IplImage*
img_8uc12 =
cvLoadImage("flower1.jpg",CV_LOAD_IMAGE_GRAYSCALE);
&&&&IplImage*
img_edge12 = cvCreateImage(cvGetSize(img_8uc12),8,1);
&&&&IplImage*
img_8uc3 = cvCreateImage(cvGetSize(img_8uc1),8,3);
&&&&cvThreshold(img_8uc12,img_edge12,128,255,CV_THRESH_BINARY);
&&&&CvMemStorage*
storage2 = cvCreateMemStorage();
&&&&CvSeq*
first_contour2 = NULL;
Nc2 = cvFindContours(
&&&&&&&&img_edge12,
&&&&&&&&storage2,
&&&&&&&&&first_contour2,
&&&&&&&&sizeof(CvContour),
&&&&&&&&CV_RETR_LIST
&&&&&&&&);
&&&&double
cvMatchShapes(first_contour1,first_contour2,CV_CONTOURS_MATCH_I1,0);
&&&&printf("%d",n);
&&&&cvWaitKey();
&&&&IplImage*
img_8uc1 = cvLoadImage("flower.jpg",CV_LOAD_IMAGE_GRAYSCALE);
&&&&IplImage*
img_edge1 = cvCreateImage(cvGetSize(img_8uc1),8,1);
&&&&IplImage*
img_8uc3 = cvCreateImage(cvGetSize(img_8uc1),8,3);
&&&cvThreshold(img_8uc1,img_edge1,128,255,CV_THRESH_BINARY);
&&&CvMemStorage*
storage1 = cvCreateMemStorage();
first_contour1 = NULL;
&&&int Nc =
cvFindContours(
&&&&&&img_edge1,
&&&&&&storage1,
&&&&&&&first_contour1,
&&&&&sizeof(CvContour),
&&&&&CV_RETR_LIST
&&&&CvContourTree*
tree1 = cvCreateContourTree(
&&&&first_contour1,
&&&storage1,
&&&&IplImage*
img_8uc12 =
cvLoadImage("flower1.jpg",CV_LOAD_IMAGE_GRAYSCALE);
&&&&IplImage*
img_edge12 = cvCreateImage(cvGetSize(img_8uc12),8,1);
&&&&IplImage*
img_8uc3 = cvCreateImage(cvGetSize(img_8uc1),8,3);
&&&&cvThreshold(img_8uc12,img_edge12,128,255,CV_THRESH_BINARY);
&&&&CvMemStorage*
storage2 = cvCreateMemStorage();
&&&&CvSeq*
first_contour2 = NULL;
Nc2 = cvFindContours(
&&&&&&&&img_edge12,
&&&&&&&&storage2,
&&&&&&&&&first_contour2,
&&&&&&&&sizeof(CvContour),
&&&&&&&&CV_RETR_LIST
&&&&&&&&);
&&&&CvContourTree*
tree2 = cvCreateContourTree(
&&&&&&&&first_contour2,
&&&&&&&&storage2,
&&&&&&&&200
&&&&&&&&);
&&&&double
cvMatchContourTrees(tree1,tree1,CV_CONTOURS_MATCH_I1,200);
&&&&printf("%d",n);
&&&&cvWaitKey();
几何直方图匹配方:
#include&"gesrec.h"
#include //////////////////////////////////////////
#define&PI 3.14159f
//轮廓面积比较函数static&int&gesContourCompFunc(const&void* _a,&const&void* _b,&void* userdata)
double&s1, s2;
CvContour* a = (CvContour*)_a;
CvContour* b = (CvContour*)_b;
s1 = fabs(cvContourArea(a));
s2 = fabs(cvContourArea(b));
//s1 = a-&rect.height * a-&rect.//s2 = b-&rect.height * b-&rect.
if(s1 & s2)
retval =&1;
else&if(s1 == s2)
retval =&0;
retval = -1;
//src:BGR dst:void&gesFindContours(IplImage* src, IplImage* dst, CvSeq** templateContour, CvMemStorage* templateStorage,&int&flag)
int&//轮廓数IplImage*
CvMemStorage* first_
CvMemStorage* all_
CvSeq* first_
CvSeq* all_
CvSeq* cur_
//初始化动态内存first_sto = cvCreateMemStorage(0);
first_cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT,&sizeof(CvSeq),&sizeof(CvPoint), first_sto);
all_sto = cvCreateMemStorage(0);
all_cont = cvCreateSeq(0,&sizeof(CvSeq),&sizeof(CvSeq), all_sto);
//创建源图像对应的灰度图像gray = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,&1);
cvCvtColor(src, gray, CV_BGR2GRAY);
//得到图像的外层轮廓count = cvFindContours(gray, first_sto, &first_cont,&sizeof(CvContour), CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
//如果没有检测到轮廓则返回if(first_sto == NULL)
//将所有的轮廓都放到first_cont中for(;first_cont !=&0;first_cont = first_cont-&h_next)
if(((CvContour* )first_cont)-&rect.height * ((CvContour* )first_cont)-&rect.width &=625)
cvSeqPush(all_cont, first_cont);
//对轮廓按照面积进行排序cvSeqSort(all_cont, gesContourCompFunc,&0);
//在dst中画出轮廓cvZero(dst);
for(int&i =&0;i & min(all_cont-&total,&3);i++)///////////////////////次数待改{
cur_cont = (CvSeq* )cvGetSeqElem(all_cont, i);
if(flag !=&0&&& i ==&0)
*templateContour = cvCloneSeq(cur_cont, templateStorage);
CvScalar color = CV_RGB(rand()&255, rand()&255, rand()&255);
cvDrawContours(dst, (CvSeq* )cur_cont, color, color, -1,&1,&8);
//判断原点位置以确定是否需要反转图像if(src-&origin ==&1)
cvFlip(dst);
//释放内存cvReleaseMemStorage(&first_sto);
cvReleaseMemStorage(&all_sto);
cvReleaseImage(&gray);
void&gesMatchContoursTemplate(IplImage* src, IplImage* dst, CvSeq** templateContour)
CvMemStorage*
//初始化动态内存storage = cvCreateMemStorage(0);
contour = cvCreateSeq(CV_SEQ_ELTYPE_POINT,&sizeof(CvSeq),&sizeof(CvPoint), storage);
//得到轮廓并进行匹配gesFindContours(src, dst, &contour, storage,&1);
if(contour-&total !=&0)//如果得到的轮廓不为空{
double&result = cvMatchShapes((CvContour* )contour, (CvContour* )(*templateContour), CV_CONTOURS_MATCH_I3);
printf("%.2f\n", result);/////////////////////////////////////////////}
//释放内存cvReleaseMemStorage(&storage);
//模版匹配法的完整实现int&gesMatchContoursTemplate2(IplImage* src, IplImage* dst, CvSeq* templateContour)
CvSeq* cur_
CvMemStorage*
double&minValue, tempV
int&i, minI
//初始化动态内存storage = cvCreateMemStorage(0);
contour = cvCreateSeq(CV_SEQ_ELTYPE_POINT,&sizeof(CvSeq),&sizeof(CvPoint), storage);
//得到轮廓并进行匹配minIndex = -1;
gesFindContours(src, dst, &contour, storage,&1);
if(contour-&total !=&0)//如果得到的轮廓不为空{
if(templateContour-&total !=&0)
cur_cont = (CvSeq* )cvGetSeqElem(templateContour,&0);
minValue = cvMatchShapes((CvContour* )contour, (CvContour* )cur_cont, CV_CONTOURS_MATCH_I3);
minIndex =&0;
printf("0:%.2f\n", minValue);
for(i =&1;i & templateContour-&i++)
cur_cont = (CvSeq* )cvGetSeqElem(templateContour, i);
tempValue = cvMatchShapes((CvContour* )contour, (CvContour* )cur_cont, CV_CONTOURS_MATCH_I3);
if(tempValue & minValue)
minValue = tempV
minIndex =
printf("%d:%.2f\n", i, tempValue);
if(minValue &=&0.3)
minIndex = -1;
//打印匹配结果printf("the result is %d\n", minIndex);
//释放内存cvReleaseMemStorage(&storage);
return&minI
//找出轮廓最大的5个极大值点void&gesFindContourMaxs(CvSeq* contour)
CvS//重心位置CvPoint*
CvM//存储5个极大值的数组double&initMax[] = {-1, -1, -1, -1, -1};//初始极大值设置为-1double&minValue, maxV//5个极大值中的最大值与最小值CvPoint minL//最小值的位置double&preDistance =&0;
bool&isCandidate =&false;//是否是候选的极大值点
//初始化重心位置center = cvScalarAll(0);
//初始化极大值矩阵max = cvMat(1,&5, CV_64FC1, initMax);
//首先求出轮廓的重心for(i =&0;i & contour-&i++)
p = (CvPoint* )cvGetSeqElem(contour, i);
center.val[0] += p-&x;
center.val[1] += p-&y;
center.val[0] /= contour-&
center.val[1] /= contour-&
//遍历轮廓,找出所有的极大值点for(i =&0;i & contour-&i++)
p = (CvPoint* )cvGetSeqElem(contour, i);
double&distance = sqrt(pow(center.val[0] - p-&x,&2) + pow(center.val[1] - p-&y,&2));
if(distance & preDistance)
isCandidate =&true;
else&if(distance & preDistance && isCandidate ==&true)
cvMinMaxLoc(&max, &minValue, &maxValue, &minLoc);
if(distance & minValue)
cvmSet(&max, minLoc.y, minLoc.x, distance);
isCandidate =&false;
isCandidate =&false;
preDistance =
//打印5个极大值printf("%.2f %.2f %.2f %.2f %.2f\n", cvmGet(&max,&0,&0), cvmGet(&max,&0,&1), cvmGet(&max,&0,&2), cvmGet(&max,&0,&3), cvmGet(&max,&0,&4));
//计算轮廓的pair-wise几何直方图CvHistogram* gesCalcContoursPGH(CvSeq* contour)
CvHistogram*//成对几何直方图CvContour* tempC
//得到成对几何直方图第二个维度上的范围tempCont = (CvContour* )
cvBoundingRect(tempCont,&1);
int&sizes[2] = {60,&200};
float&ranges[2][2] = {{0,PI}, {0,200}};
float** rangesPtr =&new&float* [2];
rangesPtr[0] = ranges[0];
rangesPtr[1] = ranges[1];
//初始化几何直方图hist = cvCreateHist(2, sizes, CV_HIST_ARRAY, rangesPtr,&1);
//计算轮廓的成对几何直方图cvCalcPGH(contour, hist);
//对轮廓的pair-wise几何直方图进行匹配void&gesMatchContoursPGH(CvSeq* contour, CvHistogram* templateHist)
CvHistogram*
//得到轮廓的成对几何直方图hist = gesCalcContoursPGH(contour);
//归一化直方图cvNormalizeHist(templateHist,&1);
cvNormalizeHist(hist,&1);
//直方图匹配double&result = cvCompareHist(hist, templateHist, CV_COMP_INTERSECT);
printf("result:%.2f\n", result);
//释放内存cvReleaseHist(&hist);
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。Matplotlib: Python plotting & Matplotlib 2.2.2 documentation
is accepting
Navigation
Matplotlib is a Python 2D plotting library which produces publication quality
figures in a variety of hardcopy formats and interactive environments across
platforms. Matplotlib can be used in Python scripts, the Python and
shells, the
notebook, web application servers, and four graphical user
interface toolkits.
Matplotlib tries to make easy things easy and hard things possible. You
can generate plots, histograms, power spectra, bar charts, errorcharts,
scatterplots, etc., with just a few lines of code. For examples, see the
For simple plotting the pyplot module provides a MATLAB-like interface,
particularly when combined with IPython. For the power user, you have full
control of line styles, font properties, axes properties, etc, via an object
oriented interface or via a set of functions familiar to MATLAB users.
Installation
Visit the .
Documentation
This is the documentation for Matplotlib version 2.2.2.
To get started, read the .
Trying to learn how to do a particular kind of plot? Check out the
Other learning resources
There are many
including printed material, videos and tutorials.
Need help?
Matplotlib is a welcoming, inclusive project, and we try to follow the
in everything we do.
For help, join the
mailing lists, or check out the
Matplotlib tag on . The
tool searches
all of the documentation, including full text search of over 350 complete
examples which exercise almost every corner of Matplotlib.
You can file bugs, patches and feature requests on the , but it
is a good idea to ping us on the mailing list too.
To keep up to date with what’s going on in Matplotlib, see the
page or browse the . Anything that could
require changes to your existing code is logged in the
Matplotlib ships with several add-on ,
including 3d plotting with mplot3d, axes helpers in axes_grid1 and axis
helpers in axisartist.
Third party packages
A large number of
extend and build on Matplotlib functionality, including several higher-level
plotting interfaces (, , , …), and two projection
and mapping toolkits ( and ).
Citing Matplotlib
Matplotlib is the brainchild of John Hunter (), who, along with its
many contributors, have put an immeasurable amount of time and effort into
producing a piece of software utilized by thousands of scientists worldwide.
If Matplotlib contributes to a project that leads to a scientific publication,
please acknowledge this work by citing the project. A
is available.
Open source
Please consider
the Numfocus organization or to the .
is based on the .
There is an active developer community and a long list of people who have made
significant .
Matplotlib is hosted on .
are tracked at Github too.

我要回帖

更多关于 连接菱形的各边中点 的文章

 

随机推荐