27 Nov 2010

Powerpoint2007无法输入中文



不知道为什么,突然无法输入中文,google了一下,大多都是说这个问题


可惜的是,我这个选项本来就没有选.多次勾选/选中也不能解决问题.后来找到一个注册表的解决办法:

15 Nov 2010

Python标准库手册 - 4.1 site模块引入的常量


4.1. site模块添加的常量



site模块(启动时会自动导入,除非指定命令行参数-S)添加了一些常量给内置命名空间.它们对于交互式解释环境很有帮助,而且不应该在程序中被使用.



quit([code=None])
exit([code=None])
    当对象被打印时,打印出类似于"使用quit()或Ctrl-D(例如EOF)退出"的信息,被调用时,使用指定的退出code抛出SystemExit异常.

copyright
license
credits
    当对象被打印时,打印出类似于"输入license()查看全部许可内容"的信息,被调用时,用纸张模式显示相应的文字(一次打印一屏).
    


<<4. 内置常量    >>目录    >>5. 内置类型
    



Python标准库手册 - 4. 内置常量


4. 内置常量



    内置的命名空间仅有几个常量,它们是:
    
False
    布尔类型的"假"值
    2.3版本新增
    


True
    布尔类型的"真"值
    2.3版本新增
    
None
    types.NoneType的唯一值.None经常被用来表示值的缺失,当默认参数并未传递给一个函数时.
    2.4版本改动:为None赋值是非法的,并会抛出SyntaxError异常.
    
NotImplemented
    特殊方法"富比较"(rich comparison)(__eq__(), __lt__(), 和friends)可以返回的特殊值,用以表示对给定类型的指定比较方式并未被做实.

Ellipsis
    与扩展切片语法连用的特殊值.

__debug__
    此常量值为True如果Python没有以-0参数启动.参考assert语句.
    
注意
    名称None和__debug__无法被赋值(甚至当做参数名称也不行,抛出SyntaxError),因此他们可被认为是True常量.
    2.7版本改动:当做参数名称对__debug__赋值变为非法.



<<2. 内置函数 - 3 & 3. 次要内置函数    >>目录    >>4.1: site模块添加的常量
    



9 Nov 2010

python调用selenium模拟浏览器行为


测试python刷新签证结果的脚本时候发现,由于调用win32com模拟ie,为了等待ie的状态更新,使用了无限循环while 1这种语法,面对检测刷新结果本身需要无限刷新的情况下,程序的流程很乱,而且结果好像有不正确的情况.搜到了selenium这个东东,经测试,代码非常清晰,封装成2个函数调用,而且效果也很好.具体代码:

python运行脚本的批处理bat文件


python脚本的运行可以直接双击py文件,但是窗口会一闪而过,如果用idel打开,又是2个窗口,一个源文件,一个shell,如果想在命令行看效果,可以写一个简单的批处理文件调用py脚本,具体如下:

8 Nov 2010

OpenGL函数二


opengl函数解释2 第一章使用颜色
l. l glshadeModel--选择平面明暗模式或光滑明暗模式
1. 2 glColor--设置当前颜色
1. 3 glColorPointer--定义颜色数组
1. 4 gllndex--设置当前颜色索引
1. 5 gllndexPointer--定义颜色索引数组
1. 6 glCOforTableEXT--为目标调色板纹理指定调色板的格式和大小
1. 7 glColorsubTableEXT--指定需要替代的目标纹理调色板的一部分
第二章 绘製几何图原及物体
2. l glVertex--指定顶点
2. 2 glVertexPointer--定义顶点数据数组
2. 3 glArrayElement--指定用来绘製顶点的数组元素
2. 4 glBegin, glEnd--限定一个或多个图原顶点的绘製
2. 5 glEdgeFlag, glEdgeFlagy--指定边界标记
2. 6 glPointsize--指定光栅化点的直径
2. 7 glLinewidth--指定光栅化直线的宽度
2. 8 glLinestipple--指定点划线
2. 9 glPolygonMode--选择多边形光栅化模式
2. 10 glFrontFace--定义正面多边形和反反面多边形
2. 11 glPolygonstipple--设置多边形点划图
2. 12 glDrawElements--从数组数据绘製图原
2. 13 glRect--绘製矩形
第三章 坐标转换
3. l glTranslate--用平移矩阵乘以当前矩阵
3. 2 glRotate--用旋转矩阵乘以当前矩阵
3. 3 glscale--用缩放矩阵乘以当前矩阵
3. 4 glViewport--设置机口
3. 5 glFrustum--用透视矩阵乘以当前矩阵
3. 6 glorthO--用正视矩阵乘以当前矩阵
3. 7 glClipPlane--指定切割几何物体的平面
第四章 堆栈操作
4. l glLoadMatrix--用任意矩阵替换当前矩阵
4. 2 glMultMatrix--用任意矩阵乘以当前矩阵
4. 3 glMatrixMode--指定哪一个矩阵是当前矩阵
4. 4 glPushMatrix, glPopMatrix--压人和弹出当前矩阵堆栈
4. 5 glPushAttrib, glPopAttrib--压人和弹出属性堆栈
4. 6 glPushClientAttrib, glPopClientAttrib--在客户属性堆栈中保存和恢复客户状态变量组
4. 7 glPushName, gPopName--压人和弹出名称堆栈
4. 8 gllnitNames--初始名称堆栈
4, 9 glLoadName--向名称堆栈中装载名称
第五章 显示列表
5. l glNewList, glEndList--创建或替换一个显示列表
5. 2 glCallLISt--执行一个显示列表
5. 3 glCallLISts--执行一列显示列表
5. 4 glGenLists--生成一组空的相邻的显示列表
5. 5 glDeleteLists--删除一组相邻的显示列表
5. 6 gllSLISt--检验显示列表的存在
第六章 使用光照和材质
6. l glNormal--设置当前的法向量
6. 2 glNormalPointer--定义法向量数组
6. 3 glLight--设置光源参数
6. 4 glLightModel--设置光照模型参数
6. 5 glMaterial--为光照模型指定材质参数
6. 6 glColorMateria--使材质颜色跟踪当前颜色
第七章 像素操作
7. l glRasterPos--为像素操作指定光栅位置
7. 2 glBitmap--绘製位图
7. 3 glReadPixels--从帧缓存中读取一块像素
7. 4 glDrawPixels--将一个像素块写人帧缓存
7. 5 glCopyPixels--在帧缓存中拷贝像素
7. 6 glCopyTexlmage1D--将像素从帧缓存拷贝到一维纹理图像中
7. 7 glCopyTexlmageZD--把像素从帧缓存拷贝到二维纹理图像中
7. 8 glCopyTexsublmagelD--从帧缓存中拷贝一维纹理图像的子图像
7. 9 glCopyTexsublmageZD--从帧缓存中拷贝二维纹理图像的子图像
7. 10 glPixelZoom--指定像素缩放因子
7. 11 glPixelstore--设置像素存储模式
7. 12 glPixelTransfer--设置像素传输模式
7. 13 glPixelMap--设置像素传输映射表
第八章 纹理映射
8. l glTexlmagelD--指定一维纹理图像
8. 2 glTexlmageZD--指定二维纹理映射
8. 3 glTexParameter--设置纹理参数
8. 4 glTexsublmage1D--指定已存在的一维纹理图像的一部分
8. 5 glTexsublmageZD--指定已存在的二维纹理图像的一部分
8. 6 glTexEnv--设置纹理环境参数
8. 7 glTexCoord--设置当前纹理坐标
8. 8 glTexGen--控制纹理坐标的生成
8. 9 glTexCoordPointer--定义纹理坐标数组
8. 10 glDeleteTextures--删除命名的纹理
第九章 特殊效果操作
9. l glBlendFunc--指定像素的数学算法
9. 2 glHint--指定由实现确定的控制行为
9. 3 glFOg--指定雾化参数
第十章 帧缓存操作
10. l glClear--将缓存清除为预先的设置值
10. 2 glClearAccum--设置累加缓存的清除值
10. 3 glClearColor--设置颜色缓存的清除值
10. 4 glClearDepth--设置深度缓存的清除值
10. 5 glClearlndex--设置颜色索引缓存的清除值
10. 6 glClearstencil--设置模板缓存的清除值
10. 7 glDrawBuffer--指定绘製的颜色缓存
10. 8 gllndexMask--控制颜色索引缓存中单个位的写操作
10. 9 glColorMask--激活或关闭帧缓存颜色分量的写操作
10. 10 glDepthMask--激活或关闭对深度缓存的写操作
10. 11 glstencilMask--控制模板平面中单个位的写操作
10. 12 glAlphaFunc-一指定alpha检验函数
10. 13 glstencilFunc--设置模板检验函数和参考值
10. 14 glstencilop--设置模板检验操作
10. 15 glDepthFunc--指定深度比较中使用的数值
10. 16 glDepthRange--指定从单位化的设备坐标到窗口坐标的z值映射
10. 17 glLOgiCOp--为颜色索引绘製指定逻辑像素操作
10. 18 glACCum--对累加缓存进行操作
第十一章 绘製曲线和曲面
11. l glEvalCoord--求取激活的一维和二维纹理图
11. 2 glMapl--定义一维求值器
11. 3 glMapZ--定义二维求值器
11. 4 glMapGrid--定义一维或二维网格
11. 5 glEvalMesh--计算一维或二维点网格或线网格
11. 6 glEvalPoint--生成并求取网格中的单个点
第十二章 查询函数
12. l glGet--返回所选择的参数值
12. 2 glGetClipPlane--返回指定的切平面係数
12. 3 glGetColorTableEXT--获得当前目标纹理调色板的颜色表数据
12. 4 glGetColorTableParameterfvEXT, glGetColorTableParameterlvEXT-从颜色表中获得调色板参数
12. 5 glGetError--返回错误信息
12. 6 glGetLight--返回光源参数值
12. 7 glGetMap--返回求值器参数
12. 8 glGetMaterial--返回材质参数
12. 9 glGetPixelMap--返回指定的像素映像
12. 10 glGetPointery--返回顶点数据数组地J
12. 11 glGetPolygonstipple--返回多边形点戈
12. 12 glGetstring--返回描述当前OpenGL
12. 13 glGetTexEnv--返回纹理环境参数
12. 14 glGetTexGen--返回纹理坐标生成参数
12. 15 glGetTexlmage--返回纹理图像
12. 16 glGetTexLevelParameter--返回指定细节水平的纹理参数值
12. 17 glGetTexParameter--返回纹理参数值
第二篇GLU库函数
第一章 绘製NURBS曲线和曲面
1. l gluNewNurbsRenderer--创建一个NURBS对像
1. 2 gluNurbsProperty--设置NURBS属性
1. 3 gluNurbsCallback--为NURBS对像定义回调函数
1. 4 gluBeginCurve, gluEndCurve--限定NURBS曲线的定义
1. 5 gluNurbsCurve--定义NURBS曲线的形状
1. 6 gluDeleteNurbsRenderer--删除NURBS对像
1. 7 gluBeglnsurface, gluEndsurface--限定NURBS曲面的定义
1. 8 ghiNurbssurface--定义NURBS曲面的形状
1. 9 gluBeginTrim, gluEndTrim--限定NURBS裁剪环的定义
1. 10 gluPwlCurve--描述分段线性NURBS裁剪曲线
1. ll gfuBeglnPolygon, gluEndPolygon--限定多边形的定义
1. 12 gluPickMatrix--定义拾取区域
第二章 绘製二次几何物体
2. l gluNewQuadric--创建一个二次对象
2. 2 gluQuadricDrawsope--指定二次对象的绘製方式
2. 3 gluQuadricNormals--指定二次对象使用的法向量类型
2. 4 gluQuadricorientation--指定二次对象的内侧面或外侧面方向
2. 5 gluCylinder--绘製圆柱体
2. 6 ghisphere--绘製球体
2. 7 glllDISk--绘製圆盘
2. 8 gluPartialDisk--绘製部分圆盘
2. 9 gliJDeleteQuadric--删除二次对象
2. 10 gluQuadricTexture--指定是否为二次对象使用纹理
2. 11 ghiQuadricCallback--为二次对象定义回调
第三章 网格化
3. l gluNewTess--创建一个网格化对象
3. 2 gluTessVertex--在多边形上指定顶点
3. 3 gluTessCallback--为网格化对象定义回调
3. 4 gluTessBeglnPolygon, ghiTessEndPolygon--限定多边形的描述
3. 5 gluTessBeglnContour, gluTessEndContour--限定多边形轮廓线的定义
3. 6 gluTessProperty--设置网格化对象的属性
3. 7 ghiNextContour--标记开始绘製另一个轮廓线
3. 8 gluTessNormal--为多边形指定法向量
3. 9 gluDeleteTess--删除网格化对象
第四章 坐标变换
4. l gluOorthoZD--定义二维正视投影矩阵
4. 2 gluPerspective--创建透视投影矩阵
4. 3 gltlLOOkAt--定义视景转换
4. 4 gluProject--将物体坐标映射为窗口坐标
4. 5 gluInProject--将窗口坐标映射力物体坐标
第五章 多重映射
5. l gfuBuildlDMipmaps--创建一维多重映射
5. 2 gluBuildZDMipmaps--创建H维多重映射
5. 3 gluSCalelmage--将图像缩放到任意尺寸
第六章 查询函数
6. l ghiErrorstring--从OpenGL或GLU错误代码中生成错误字符串
6. 2 gluGetNurbsProperty--获得NURBS属性
6. 3 ghiGetstring--获得描述GLU版本号或支持GLU扩展调用的字符串
6. 4 ghiGetTessProperty--获得网格化对象的属性
第三篇GLUT库函数
第一章 初始化和启动事件处理
1. l ghjtlnit--初始化GLUT库
1. 2 glutlnitwindowPosition--设置初始窗口位置
1. 3 glutlnitwindowsize--设置初始窗口大小
1. 4 glutlnitDisplayMode--设置初始显示模式
1. 5 glutMainLoop--进人GLUT事件处理循环
第二章 窗口管理
2. l glutCreatewindow--创建顶层窗口
2. 2 glutCreatesubwindow--创建子窗口
2. 3 ghitHidewindow--隐藏当前窗口的显示状态
2. 4 glutshowwindow--改变当前窗口的显示状态, 使其显示
2. 5 gfutsetwindowTitle--设置当前顶层窗口的窗口标题
2. 6 ghitsetlconTitle--设置当前顶层窗口的图标标题
2. 7 ghitPostRedisplay--标记当前窗口需要重新绘製
2. 8 glutswapBuffers--交换当前窗口的缓存
2. 9 glutFullscreen--关闭全屏显示
2. 10 glutPositionwindow--申请改变当前窗口的位置
2. ll gintReshapewindow--申请改变当前窗口的大小
2. 12 glutsetwindow--设置当前窗口
2. 13 ghitGetwindow--获得当前窗口的标识符
2. 14 glutPopwindow--改变当前窗口的位置, 使其前移
2. 15 ghitPtshwilldOO--改变当前窗口的位置, 使其后移
2. 16 glutDestroywindow--销毁指定的窗口
2. 17 glutlconifywindow--使当前窗口图标化显示
2. 18 glutsetCursor--设置当前窗口的鼠标形状
第三章 重迭层管理
3. l glutEstablishoverlay--创建当前窗口的重迭层
3. 2 glutUseLayer--改变当前窗口的使用层
3. 3 glutRemoveoverlay--删除当前窗口的重迭层
3. 4 glutPostoverlayRedisplay--标记当前窗口的重迭层需要重新绘製
3. 5 glutshowoverlay--显示当前窗口的重迭层
3. 6 glutHideoverlay--显示当前窗口的重迭层
第四章 菜单管理
4. l glutCreateMenu--创建一个新的弹出式菜单
4. 2 glutAddMenuEntry--在当前菜单的底部增加一个菜单条目
4. 3 glutAddsubMenu--在当前菜单的底部增加一个子菜单触发条目
4. 4 glutAttachMenu--把当前窗口的一个鼠标按键与当前菜单的标识符联繫起来
4. 5 glutGetMenu--获取当前菜单的标识符
4. 6 glutsetMenu--设置当前菜单
4. 7 glutDestroyMenu--删除指定的菜单
4. 8 glutChangeToMenuEntry--将指定的当前菜单中的菜单项更改为菜单条目
4. 9 glutChangeTosubMenu--将指定的当前菜单中的菜单项更改为子菜单触发条目
4. 10 glutRemoveMenultem--删除指定的菜单项
4. 11 glutDetachMenu--释放当前窗口的一个鼠标按键
第五章 注册国调函数
5. l glutDispfayFunc--注册当前窗口的显示回调函数
5. 2 glutReshapeFunc--注册当前窗口的形状变化回调函数
5. 3 glutMouseFunc--注册当前窗口的鼠标回调函数
5. 4 glutMotionFunc--设置移动回调函数
5. 5 glutldleFunc--设置全局的空閒回调函数
5. 6 glutVisibilityFunc--设置当前窗口的可视回调函数
5. 7 glutKeyboardFunc--注册当前窗口的键盘回调函数
5. 8 glutspecialFunc--设置当前窗口的特定键回调函数
5. 9 glutoverlayDisplayFunc--注册当前窗口的重迭层显示回调函数
5. 10 glutPassiveMotionFunc--设置当前窗口的被动移动回调函数
5. 11 glutEntryFunc--设置当前窗口的鼠标进出回调函数
5. 12 glutspaceballMotionFunc--设置当前窗口的空间球移动回调函数
5. 13 glutspaceballRotateFunc--设置当前窗口的空间球旋转回调函数
5. 14 glutspaceballButtonFunc--设置当前窗口的空间球按键回调函数
5. 15 glutButtonBoxFunc--设置当前窗口的拨号按键盒按键回调函数
5. 16 glutDialsFunc--设置当前窗口的拨号按键盒拨号回调函数
5. 17 glutTabletMotionFunc--设置图形板移动回调函数
5. 18 glutTabletButtonFunc--设置当前窗口的图形板按键回调函数
5. 19 glutMenustatusFunc--设置全局的菜单状态回调函数
5. 20 glutTimerFunc--注册按一定时间间隔触发的定时器回调函数
第六章 颜色素引映射表管理
6. l glutsetColor--设置当前窗口当前层一个颜色表单元的颜色
6. 2 glutGetColor--获得指定的索引颜色
6. 3 glutCopyColormap--将逻辑颜色表从指定的窗口拷贝到当前窗口
第七章 状态检索
7. l glutGet--检索指定的GLUT状态
7. 2 glutLayerGet--检索属于当前窗口重迭层的 GLU T状态
7. 3 glutDeviceGet--检索GLUT设备信息
7. 4 glutGetModifiers--返回修饰键在引起某些回调的事件发生时的状态
7. 5 glutExtensionsupported--判别当前OpenGL版本是否支持给定的OpenGL扩展
第八章 字体绘製
8. l glutBltmapCharcter--绘製一个位图字符
8. 2 glutBitmapwidth--返回一个位图字符的宽度
8. 3 glutstrokeCharcter--绘製一个笔划字符
8. 4 glutstrokewidth--返回一个笔划字体的宽度
第九章 几何图形绘製
9. 1 glutSolidsphere, glutwiresphere--绘製实心球体和线框球体
9. 2 glutsolidCube, glutwireCube--绘製实心立方体和线框立方体
9. 3 glutsolidCone, glutwireCone--绘製实心圆锥体和线框圆锥体
9. 4 glutsolidTorus, glutwireTorus--绘製实心圆环和线框圆环
9. 5 glutSolidDOdeCahedroll, glLltwiFeDOdechedfotl--绘製实心十二面体和线框十二面体
9. 6 glutSolidOctahedron, glutWireOctahedron--绘製买心八面体和线框八面体
9. 7 glutsolldTetrahedron, glutwireTetrahedron--绘製实心四面体和线框四面体
9. 8 glutSollelcosahedron, glutwirelcosahedron--绘製实心二十面体和线框二十面体
9. 9 glutsolidTeapot, glutwireTeapot--绘製实心茶壶和线框茶壶

OpenGL函数


OpenGL函数整理 一:GL库函数
使用颜色
glshadeModel--选择平面明暗模式或光滑明暗模式
glColor--设置当前颜色
glColorPointer--定义颜色数组
gllndex--设置当前颜色索引
gllndexPointer--定义颜色索引数组
glCOforTableEXT--为目标调色板纹理指定调色板的格式和大小
glColorsubTableEXT--指定需要替代的目标纹理调色板的一部分
绘制几何图原及物体
glVertex--指定顶点
glVertexPointer--定义顶点数据数组
glArrayElement--指定用来绘制顶点的数组元素
glBegin,glEnd--限定一个或多个图原顶点的绘制
glEdgeFlag,glEdgeFlagy--指定边界标记
glPointsize--指定光栅化点的直径
glLinewidth--指定光栅化直线的宽度
glLinestipple--指定点划线
glPolygonMode--选择多边形光栅化模式
glFrontFace--定义正面多边形和反反面多边形
glPolygonstipple--设置多边形点划图
glDrawElements--从数组数据绘制图原
glRect--绘制矩形
坐标转换
glTranslate--用平移矩阵乘以当前矩阵
glRotate--用旋转矩阵乘以当前矩阵
glscale--用缩放矩阵乘以当前矩阵
glViewport--设置机口
glFrustum--用透视矩阵乘以当前矩阵
glorthO--用正视矩阵乘以当前矩阵
glClipPlane--指定切割几何物体的平面
堆栈操作
glLoadMatrix--用任意矩阵替换当前矩阵
glMultMatrix--用任意矩阵乘以当前矩阵
glMatrixMode--指定哪一个矩阵是当前矩阵
glPushMatrix,glPopMatrix--压人和弹出当前矩阵堆栈
glPushAttrib,glPopAttrib--压人和弹出属性堆栈
glPushClientAttrib,glPopClientAttrib--在客户属性堆栈中保存和恢复客户状态变量组
glPushName,gPopName--压人和弹出名称堆栈
gllnitNames--初始名称堆栈
glLoadName--向名称堆栈中装载名称
显示列表
glNewList,glEndList--创建或替换一个显示列表
glCallLISt--执行一个显示列表
glCallLISts--执行一列显示列表
glGenLists--生成一组空的相邻的显示列表
glDeleteLists--删除一组相邻的显示列表
gllSLISt--检验显示列表的存在
使用光照和材质
glNormal--设置当前的法向量
glNormalPointer--定义法向量数组
glLight--设置光源参数
glLightModel--设置光照模型参数
glMaterial--为光照模型指定材质参数
glColorMateria--使材质颜色跟踪当前颜色
像素操作
glRasterPos--为像素操作指定光栅位置
glBitmap--绘制位图
glReadPixels--从帧缓存中读取一块像素
glDrawPixels--将一个像素块写人帧缓存
glCopyPixels--在帧缓存中拷贝像素
glCopyTexlmage1D--将像素从帧缓存拷贝到一维纹理图像中
glCopyTexlmageZD--把像素从帧缓存拷贝到二维纹理图像中
glCopyTexsublmagelD--从帧缓存中拷贝一维纹理图像的子图像
glCopyTexsublmageZD--从帧缓存中拷贝二维纹理图像的子图像
glPixelZoom--指定像素缩放因子
glPixelstore--设置像素存储模式
glPixelTransfer--设置像素传输模式
glPixelMap--设置像素传输映射表
纹理映射
glTexlmagelD--指定一维纹理图像
glTexlmageZD--指定二维纹理映射
glTexParameter--设置纹理参数
glTexsublmage1D--指定已存在的一维纹理图像的一部分
glTexsublmageZD--指定已存在的二维纹理图像的一部分
glTexEnv--设置纹理环境参数
glTexCoord--设置当前纹理坐标
glTexGen--控制纹理坐标的生成
glTexCoordPointer--定义纹理坐标数组
glDeleteTextures--删除命名的纹理
特殊效果操作
glBlendFunc--指定像素的数学算法
glHint--指定由实现确定的控制行为
glFOg--指定雾化参数
帧缓存操作
glClear--将缓存清除为预先的设置值
glClearAccum--设置累加缓存的清除值
glClearColor--设置颜色缓存的清除值
glClearDepth--设置深度缓存的清除值
glClearlndex--设置颜色索引缓存的清除值
glClearstencil--设置模板缓存的清除值
glDrawBuffer--指定绘制的颜色缓存
gllndexMask--控制颜色索引缓存中单个位的写操作
glColorMask--激活或关闭帧缓存颜色分量的写操作
glDepthMask--激活或关闭对深度缓存的写操作
glstencilMask--控制模板平面中单个位的写操作
glAlphaFunc-一指定alpha检验函数
glstencilFunc--设置模板检验函数和参考值
glstencilop--设置模板检验操作
glDepthFunc--指定深度比较中使用的数值
glDepthRange--指定从单位化的设备坐标到窗口坐标的z值映射
glLOgiCOp--为颜色索引绘制指定逻辑像素操作
glACCum--对累加缓存进行操作
绘制曲线和曲面
glEvalCoord--求取激活的一维和二维纹理图
glMapl--定义一维求值器
glMapZ--定义二维求值器
glMapGrid--定义一维或二维网格
glEvalMesh--计算一维或二维点网格或线网格
glEvalPoint--生成并求取网格中的单个点
查询函数
glGet--返回所选择的参数值
glGetClipPlane--返回指定的切平面系数
glGetColorTableEXT--获得当前目标纹理调色板的颜色表数据
glGetColorTableParameterfvEXT,glGetColorTableParameterlvEXT-从颜色表中获得调色板参数
glGetError--返回错误信息
glGetLight--返回光源参数值
glGetMap--返回求值器参数
glGetMaterial--返回材质参数
glGetPixelMap--返回指定的像素映像
glGetPointery--返回顶点数据数组地J
glGetPolygonstipple--返回多边形点戈
glGetstring--返回描述当前OpenGL
glGetTexEnv--返回纹理环境参数
glGetTexGen--返回纹理坐标生成参数
glGetTexlmage--返回纹理图像
glGetTexLevelParameter--返回指定细节水平的纹理参数值
glGetTexParameter--返回纹理参数值


二:GLU库函数
绘制NURBS曲线和曲面
gluNewNurbsRenderer--创建一个NURBS对像
gluNurbsProperty--设置NURBS属性
gluNurbsCallback--为NURBS对像定义回调函数
gluBeginCurve,gluEndCurve--限定NURBS曲线的定义
gluNurbsCurve--定义NURBS曲线的形状
gluDeleteNurbsRenderer--删除NURBS对像
gluBeglnsurface,gluEndsurface--限定NURBS曲面的定义
ghiNurbssurface--定义NURBS曲面的形状
gluBeginTrim,gluEndTrim--限定NURBS裁剪环的定义
gluPwlCurve--描述分段线性NURBS裁剪曲线
gfuBeglnPolygon, gluEndPolygon--限定多边形的定义
gluPickMatrix--定义拾取区域
绘制二次几何物体
gluNewQuadric--创建一个二次对象
gluQuadricDrawsope--指定二次对象的绘制方式
gluQuadricNormals--指定二次对象使用的法向量类型
gluQuadricorientation--指定二次对象的内侧面或外侧面方向
gluCylinder--绘制圆柱体
ghisphere--绘制球体
glllDISk--绘制圆盘
gluPartialDisk--绘制部分圆盘
gliJDeleteQuadric--删除二次对象
gluQuadricTexture--指定是否为二次对象使用纹理
ghiQuadricCallback--为二次对象定义回调
网格化
gluNewTess--创建一个网格化对象
gluTessVertex--在多边形上指定顶点
gluTessCallback--为网格化对象定义回调
gluTessBeglnPolygon,ghiTessEndPolygon--限定多边形的描述
gluTessBeglnContour,gluTessEndContour--限定多边形轮廓线的定义
gluTessProperty--设置网格化对象的属性
ghiNextContour--标记开始绘制另一个轮廓线
gluTessNormal--为多边形指定法向量
gluDeleteTess--删除网格化对象
坐标变换
gluOorthoZD--定义二维正视投影矩阵
gluPerspective--创建透视投影矩阵
gltlLOOkAt--定义视景转换
gluProject--将物体坐标映射为窗口坐标
gluInProject--将窗口坐标映射力物体坐标
多重映射
gfuBuildlDMipmaps--创建一维多重映射
gluBuildZDMipmaps--创建H维多重映射
gluSCalelmage--将图像缩放到任意尺寸
查询函数
ghiErrorstring--从OpenGL或GLU错误代码中生成错误字符串
gluGetNurbsProperty--获得NURBS属性
ghiGetstring--获得描述GLU版本号或支持GLU扩展调用的字符串
ghiGetTessProperty--获得网格化对象的属性


三:GLUT库函数

初始化和启动事件处理
ghjtlnit--初始化GLUT库
glutlnitwindowPosition--设置初始窗口位置
glutlnitwindowsize--设置初始窗口大小
glutlnitDisplayMode--设置初始显示模式
glutMainLoop--进人GLUT事件处理循环
窗口管理
glutCreatewindow--创建顶层窗口
glutCreatesubwindow--创建子窗口
ghitHidewindow--隐藏当前窗口的显示状态
glutshowwindow--改变当前窗口的显示状态,使其显示
gfutsetwindowTitle--设置当前顶层窗口的窗口标题
ghitsetlconTitle--设置当前顶层窗口的图标标题
ghitPostRedisplay--标记当前窗口需要重新绘制
glutswapBuffers--交换当前窗口的缓存
glutFullscreen--关闭全屏显示
glutPositionwindow--申请改变当前窗口的位置
gintReshapewindow--申请改变当前窗口的大小
glutsetwindow--设置当前窗口
ghitGetwindow--获得当前窗口的标识符
glutPopwindow--改变当前窗口的位置,使其前移
ghitPtshwilldOO--改变当前窗口的位置,使其后移
glutDestroywindow--销毁指定的窗口
glutlconifywindow--使当前窗口图标化显示
glutsetCursor--设置当前窗口的鼠标形状
重叠层管理
glutEstablishoverlay--创建当前窗口的重叠层
glutUseLayer--改变当前窗口的使用层
glutRemoveoverlay--删除当前窗口的重叠层
glutPostoverlayRedisplay--标记当前窗口的重叠层
需要重新绘制
glutshowoverlay--显示当前窗口的重叠层
glutHideoverlay--显示当前窗口的重叠层
菜单管理
glutCreateMenu--创建一个新的弹出式菜单
glutAddMenuEntry--在当前菜单的底部增加一个菜单条目
glutAddsubMenu--在当前菜单的底部增加一个子菜单触发条目
glutAttachMenu--把当前窗口的一个鼠标按键与当前菜单的标识符联系起来
glutGetMenu--获取当前菜单的标识符
glutsetMenu--设置当前菜单
glutDestroyMenu--删除指定的菜单
glutChangeToMenuEntry--将指定的当前菜单中的菜单项更改为菜单条目
glutChangeTosubMenu--将指定的当前菜单中的菜单项更改为子菜单触发条目
glutRemoveMenultem--删除指定的菜单项
glutDetachMenu--释放当前窗口的一个鼠标按键
注册国调函数
glutDispfayFunc--注册当前窗口的显示回调函数
glutReshapeFunc--注册当前窗口的形状变化回调函数
glutMouseFunc--注册当前窗口的鼠标回调函数
glutMotionFunc--设置移动回调函数
glutldleFunc--设置全局的空闲回调函数
glutVisibilityFunc--设置当前窗口的可视回调函数
glutKeyboardFunc--注册当前窗口的键盘回调函数
glutspecialFunc--设置当前窗口的特定键回调函数
glutoverlayDisplayFunc--注册当前窗口的重叠层显示回调函数
glutPassiveMotionFunc--设置当前窗口的被动移动回调函数
glutEntryFunc--设置当前窗口的鼠标进出回调函数
glutspaceballMotionFunc--设置当前窗口的空间球移动回调函数
glutspaceballRotateFunc--设置当前窗口的空间球旋转回调函数
glutspaceballButtonFunc--设置当前窗口的空间球按键回调函数
glutButtonBoxFunc--设置当前窗口的拨号按键盒按键回调函数
glutDialsFunc--设置当前窗口的拨号按键盒拨号回调函数
glutTabletMotionFunc--设置图形板移动回调函数
glutTabletButtonFunc--设置当前窗口的图形板按键回调函数
glutMenustatusFunc--设置全局的菜单状态回调函数
glutTimerFunc--注册按一定时间间隔触发的定时器回调函数
颜色素引映射表管理
glutsetColor--设置当前窗口当前层一个颜色表单元的颜色
glutGetColor--获得指定的索引颜色
glutCopyColormap--将逻辑颜色表从指定的窗口拷贝到当前窗口
状态检索
glutGet--检索指定的GLUT状态
glutLayerGet--检索属于当前窗口重叠层的 GLU T状态
glutDeviceGet--检索GLUT设备信息
glutGetModifiers--返回修饰键在引起某些回调的事件发生时的状态
glutExtensionsupported--判别当前OpenGL版本是否支持给定的OpenGL扩展
字体绘制
glutBltmapCharcter--绘制一个位图字符
glutBitmapwidth--返回一个位图字符的宽度
glutstrokeCharcter--绘制一个笔画字符
glutstrokewidth--返回一个笔画字体的宽度
几何图形绘制
glutSolidsphere,glutwiresphere--绘制实心球体和线框球体
glutsolidCube,glutwireCube--绘制实心立方体和线框立方体
glutsolidCone,glutwireCone--绘制实心圆锥体和线框圆锥体
glutsolidTorus,glutwireTorus--绘制实心圆环和线框圆环
glutSolidDOdeCahedroll,glLltwiFeDOdechedfotl--绘制实心
十二面体和线框十二面体
glutSolidOctahedron,glutWireOctahedron--绘制买心八面体和线框八面体
glutsolldTetrahedron,glutwireTetrahedron--绘制实心四面体和线框四面体
glutSollelcosahedron,glutwirelcosahedron--绘制实心二十面体和线框二十面体
glutsolidTeapot,glutwireTeapot--绘制实心茶壶和线框茶壶

7 Nov 2010

python发送邮件


Update:可以使用下面的函数来发信

def SendEmail(fromEmail, password, toEmailList, subjectStr, contentStr):
    import smtplib
    import email.utils
    from email.mime.text import MIMEText

    # Create the message
    msg = MIMEText(contentStr)
    msg['To'] = email.utils.formataddr(('Recipient', ','.join(toEmailList)))
    msg['From'] = email.utils.formataddr(('Author', fromEmail))
    msg['Subject'] = subjectStr

    # Create the connection
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.set_debuglevel(True)  # show communication with the server
    try:
        # identify ourselves, prompting server for supported features
        server.ehlo()

        # If we can encrypt this session, do it
        if server.has_extn('STARTTLS'):
            server.starttls()
            server.ehlo()  # re-identify ourselves over TLS connection

        server.login(fromEmail, password)
        server.sendmail(fromEmail, toEmailList, msg.as_string())
    finally:
        server.quit()

为了刷签证结果,我每天刷十几次,于是写了脚本来模拟浏览器访问网站得到处理结果,具体见:python模拟网页填表.但是还是害怕漏掉,firefox有webmail notifier插件,于是想完善上个脚本,如果处理结果不是"正在处理当中",就给我邮箱发一封信,这样用死循环,每5分钟刷新一次,直到出结果邮件发送成功再break.网上一搜,发邮件的代码大把,无奈都是08年居多,竟然都不能成功,大多死在sendmail步骤,貌似是socket超时了.底层不懂啊,继续google,找到了如下代码,经测试好用.贴出来,记录之.

2 Nov 2010

灰度变换

首先提取一幅图像的一个象素,在BMP格式中一个象素由8位红色亮度值,8位绿色亮度值和8位蓝色亮度值组成,只要按一定的变换函数去变换

这种3种颜色的亮度值就可以起到灰度变换的目的。 变换原理是这样的:

比如线性变换
可以用一个线性函数
f(x,y)=a'+(b'-a')/(b-a)×(f(x,y)-a)
f(x,y)代表一个象素
[a,b]是原始图像的灰度范围,[a',b']是变换后新图像的灰度范围
用这个线性函数分别对R,G,B分量进行变换可以起到单色增强的目的,然后再混合输出。
如果b'-a' > b-a ,则使得图像灰度范围增大,即对比度增大,图像会变得清晰
如果b'-a' < b-a ,则使得图像灰度范围缩小,即对比度减小。 分段线性变换 和线性变换差不多 不过对于单一一个R或G或B分量采用分段函数进行变换。 如 f(x,y)=a'+(b'-a')/(b-a)×(f(x,y)-a) 当f(x,y)在[a,b]范围内 f(x,y)=0 当f(x,y)n
这样就指定了一个变换段 a,b,只有灰度在a,b段内的点才会增强,灰度b的变成白色。

非线性变换
可以根据需要制定非线性函数对灰度进行变换,典型的有
对数变换
f(x,y)=a+ ln[f(x,y)+1]/(b×lnc) 这里a,b,c是参数而不是灰度范围了,对数变换用于扩展低灰度区
指数变换
f(x,y)=b^(c*[f(x,y)]-a]) ,a,b,c同样是参数,指数变换用来压缩低灰度区

OpenCV 简明介绍 - ZT


这里简单的记录一些 OpenCV 这个库的使用。这是用 C/C++ 写的一个和 computer vision 相关的库,一共含有 5 个组件:

* CXCORE 是 OpenCV 里面使用的常用数据结构,以及处理这些数据结构的函数。
* CV 是常用的 computer vision 相关的函数,比如计算 histogram、目标检测、跟踪的程序。
* ML 是常用的 machine learning 相关的函数,如做分类的 naive Bayes、SVM 等等。
* highgui 是一些比较高层函数,主要是做用户界面。
* 另外还有一个从摄像头获取数据的 CVCAM 库,但是 1.1 里面似乎并进 highgui 了。
注:可能作者写文章时候比较早,目前opencv已经2.1版本了.

最新的是 1.1pre1,但是 debian 里面还是两年前的 1.0 版本的,这就需要自己编译一个了,后面有空学着 debian 的方式做个 deb 包好了。

OpenCV 的文档也算是还不错的了,除了函数的解释,部分功能还有例程、例子可以参考,这对对函数功能不是很清楚的人是非常有用的,比如我 :-D 这里不打算详细的记录 OpenCV 的每个功能,感兴趣的看文档吧。



先从 CXCORE 的基本结构讲起,OpenCV 里面提供了:

点 CvPoint(分 int 和 float 类型的,一般 int 的都没有后缀,float 会写 32f,double 是 64f;有 2D 和 3D 的版本),

大小 CvSize、

矩形 CvRect(用左下角的顶点坐标和宽、高表示)、

向量 CvScalar(4 个 double 那么大)。

更重要的就是存储矩阵用的 CvMat、CvMatND(多维矩阵,一般图片就是几个 channel,每个 channel 是一个 CvMat),稀疏矩阵 CvSparseMat。注意这里面有一个比较重要的成员,就是 int* refcount,这是允许多个“矩阵”(其实是 CvMatHeader 或者 CvMatNDHeader)对同一个矩阵进行引用,这时释放的时候涉及到矩阵元素的属主(ownership),只有当 refcount 为 0 的时候,释放的时候才会释放这些元素。数据的入口都是匿名 union,data 可以当作指针用。

图片一般存放在一个 IplImage 结构里面,这个结构里面有很多参数决定图片数据的类型,比如是 UINT8 还是 float 等。创建这些数据最基本的函数就是 cvCreate*,这是产生一个完整的结构,并且分配数据的内存,另有一种是仅仅分配一个 header,函数就是 cvCreate*Header,之后可以用 cvSet*Data 指定数据,释放这些结构使用 cvRelease* 和 cvRelease*Header。另外可以通过 cvInit* 和 cvInit*Header 初始化这些数据结构。我们发现 OpenCV 的函数都是以 cv 开头,而结构都是 Cv 开头。另外,进行深层 copy 使用 cvClone* 函数。如果需要手工增加/减少对数据的 refcount,可以使用 cvIncRefData、cvDecRefData。OpenCV 里面的数据用 CvArr,这是一个 void 类型,因此可以自由转换成为别的类型,如果需要访问 CvArr 类型的数据,可以用 cvGetRawData,下面是一个例子:

cvGetRawData( array, (uchar**)&data, &step, &size );

step /= sizeof(data[0]);

for( y = 0; y < size.height; y++, data += step )

for( x = 0; x < size.width; x++ )

data[x] = (float)fabs(data[x]);
这里的 data 是个 float*,因此每次递增量是 cvGetRawData 返回的 step 除以 sizeof(float)。类似的,cvGet* 命令将会返回对应的 header,如 cvGetMat、cvGetImage 等。 对于一个 CvMat,可以用 cvGetSubMat、cvGetRow(s),cvGetCol(s)、cvGetDiag 获得矩阵的部分,cvGetSize 获得矩阵的大小。遍历稀疏矩阵一般用 cvInitSparseMatIterator、cvGetNextSparseNode。另外可以用 cvGetElemType 获得元素种类,cvGetDim(s) 获得多维矩阵的大小。如果需要访问某些元素,可以用 cvPtr?D 获得指针,cvGet?D 获得元素值,另外有快速版本 cvmGet(对 2D 的矩阵)。对应有 Set 版本,用于赋值,特别的有 cvSetZero 和 cvSetIdentity 用于产生 0 矩阵和单位矩阵。另外和 matlab 类似有个 cvRange,cvReshape 改变矩阵大小,cvRepeat 和 repmat 类似,cvFlip 和 flip* 类似,cvSplit 切分矩阵,cvMerge 是逆操作。针对图片提供有 cvMixChannels。和 randperm 类似有一个 cvRandShuffle。 cvLUT 进行查表(某些图片是 indexed color),cvConvertScale 可以将不同的类型的数据(尤其是图片,有的用 float 的 0-1 表示,有的用 UINT8 表示)互相转化,它的一个特殊情况就是 cvConvertScaleAbs,cvAdd 将两个 CvArr 相加,cvAddS 加的是 scalar,cvAddWeighted 是加权和,cvSub 是相减,cvSubS 减标量,cvSubRS 是用标量减 CvArr,cvMul 是相乘,,cvDiv 是除,另外有 cvAnd(S)、cvOr(S)、cvXor(S)、cvNot、cvCmp(S);cvInRange(S) 可以检查元素是不是位于上下界中,cvMax(S)、cvMin(S) 求最大最小,cvAbsDiff(S) 求差的绝对值,cvCountNonZero 数非零元素个数,cvSum 求和,cvAvg 求平均,cvAvgSdv 计算均值和标准差,cvMinMaxLoc 返回最小最大的位置,cvNorm 计算范数(包括 L_1、L_2 和 L_\infty)。cvReduce 将矩阵变成向量。 OpenCV 也实现了一些代数运算,比如 cvDotProduct 计算内积,cvNormalize 将向量依照某种范数归一化,cvCrossProduct 计算叉积,cvScaleAdd 将标量相加,cvGEMM 是一个广义的矩阵乘积,包括每个矩阵是不是转置,然后相乘相加(用它定义了 cvMatMulAdd 和 cvMatMul),矩阵产生的变换 cvTransform、cvPerspectiveTransform,转置相乘 cvMulTransposed,迹 cvTrace,转置 cvTranspose、行列式 cvDet,cvInvert 求逆,cvSolve 求解线性方程组,cvSVD 计算奇异值分解,cvSVBkSb 用奇异值产生原来的矩阵,求对称矩阵的特征值 cvEigenVV,cvCovarMat 计算协方差矩阵,cvMahanobis 计算马氏距离,cvCalcPCA 计算主成分分解,cvProjectPCA 进行投影,cvBackProjectPCA 重构,。 下面是 OpenCV 里面常用的数学函数,如舍入的 cvRound、cvFloor 和 cvCeil,开方系列 cvSqrt、cvInvSqrt、cvCbrt,反正切 cvFastArctan、判断 cvIsNaN、cvIsInf,坐标转换 cvCartToPolar 和 cvPolarToCart,幂函数 cvPow,指数 cvExp,对数 cvLog,求解三次方程 cvSolveCubic,一般多项式 cvSolvePoly。 另外有一些随机数相关的函数,比如 cvRNG 产生一个 random number generator,cvRandArr 产生一个随机 CvArr,cvRandInt 返回一个随机整数,cvRandReal 产生 0-1 之间的随机实数。 另外有一些和 discrete Fourier transform 相关的东西,比如 cvDFT,cvDCT 等。 OpenCV 提供了一些动态存储的数据结构,这在很多操作中非常重要,比如需要进行检测某些特征点,那么用户并不知道将会发现多少个,所以最好的方法是使用 OpenCV 的动态数据结构,不过很遗憾的是,似乎这些结构不仅不能和 STL 的容器互相转换,接口也并不统一。 比较重要的类结构是 CvMemStorage,一般说来我们使用 cvCreateMemStorage 创建一个,并最后用 cvReleaseMemStorage 释放,OpenCV 里面很多函数需要 workspace 往往就是一个 CvMemStorage,如果需要自己进行更细致的操作,就需要了解一些比较基本的知识,比如它的结构是一个一个的 block 用双向链表链接(CvMemBlock 结构)而成,通过 CvMemStoragePos 记录位置,通过 cvCreateChildMemStorage 可以创建一个和 parent 相对独立的存储空间,临时存放数据非常方便。通过 cvClearMemStorage 将该结构管理的内存减到最少。CvMemStorage 提供了一个较大尺度的内存管理机制,而 CvSeq 就成为了一个容器,这个容器是一个双向链表(另有 CvSeqBlock 是个循环链表)。这个容器可以用 cvCreateSeq 创建(有一些内部支持的类型),cvSeqPush/cvSeqPop 是当作一个 stack 来进行入栈操作,类似的操作是 cvSeqPush/PopFront(队列常用操作),还可以一次插入多个 cvPush/PopMulti,插入 cvSeqInsert、删除 cvSeqRemove、删除所有元素 cvClearSeq、获得其中一个元素 cvGetSeqElem、获得一个元素的指标 cvGetElemIdx、转换成 array cvCvtSeqToArray、为 array 创建 Seq 的 header cvMakeSeqHeaderForArray,创建一个 CvSeq 的子序列 cvSlice、复制 cvCloneSeq、子序列的删除插入 cvRemove/InsertSlice、反转 cvSeqInvert、排序 cvSeqSort、搜索 cvSeqSearch。和 CvSeq 的输入输出相关的就是 CvSeqWriter 和 CvSeqReader 了,分别调用 cvStart/EndWriter/Reader 即可。 另外一个有用的数据结构是 CvSet,它是 CvGraph、SvSparseMat 和 CvSubdiv2D 的父类,其实现依赖于 CvSeq,创建一个 CvSet 和 CvSeq 类似为 cvCreateSet,添加、删除元素使用 cvSetAdd(cvSetNew 是一个 inline 版本)和 cvSetRemove(cvSetRemoveByPtr 使用指针删除),cvGetSetElem 通过一个索引获得元素,cvClearSet 清除里面的元素。 CvGraph 是用来表示一个带权有向或者无向图的数据结构,用 cvCreateGraph 创建,cvGraphAdd/RemoveVxt 添加顶点(另有一个ByPtr 版本),可以用 cvGetGraphVxt 获得顶点内容,cvGraphVxtIdx 获得元素的索引,cvGraphAdd/RemoveEdge 添加/删除边(也有 ByPtr 版本),另外有搜索边的 cvFindGraphEdge 以及 ByPtr 版本。通过 cvGraphVxtDegree 获得顶点的 degree,清除一个 graph 可以用 cvClearGraph,复制用 cvCloneGraph。遍历一个 graph 可以用 CvGraphScanner 这个数据结构,使用 cvCreateGraphScanner 创建深度优先便利的 scanner(用 Release 释放),这个 scanner 可以用一个 mask 来决定哪些地方是值得停下来供程序员处理的,有了这个 scanner 后用 cvGraphNextItem 就可以迭代了。 OpenCV 里面还有不少作图函数,就是在图片上画一些简单的几何形状,比如 Line、Rectangle、Circle、Ellipse、EllipseBox、FillPoly、FillConvexPoly、 PolyLine。另外为了渲染字体,有 cvInitFont,cvPutText、cvGetTextSize 供使用。另外提供了 cv 里面 contour 的绘制函数(一般使用 cvFindContours 获得等高线,然后)cvDrawContours。通过 cvInitLineIterator 可以获得一条直线(指定起点和终点)上面的那些 pixel。cvClipLine 是将一条直线用一个矩形 clip。cvEllipse2Poly 将椭圆转换成为 polyline。 另外 cxcore 里面还提供了一个一致的存储数据的方式,这是通过 XML(或者 YAML)和 CvFileStorage 结构实现的,XML 本身是一个 tree 结构的东西,每个节点用 CvFileNode 表示其类型,用 CvAttrList 表示一个对象含有的属性列表。创建/释放一个 CvFileStorage 对象用 cvOpen/ReleaseFileStorage 函数。前者创建的 CvFileStorage 可用 cvStart/EndWriteStruct 或者 cvWriteInt/String/Real/Comment/RawData 进行写入,另外有 cvWrite 适合写入 CvSeq 等对象。读取使用比较笨的就是直接 cvRead*ByName,或者 cvGetFileNodeByName,比较快的是创建 CvStringHashNode,使用它查询 cvGetFileNode,然后从 CvFileNode 里面获得数据。另外,也有类似的 cvReadInt/Real/等等,以及 cvRead。 OpenCV 提供了一个基本的 RTTI 实现,这是利用 CvTypeInfo 实现的,利用 cvTypeOf 可以获得对应的类型,如果不确定有没有某个类型,可以用 cvFindType 搜索,通过 cvRegisterType 和 cvUnregisterType 注册、注销新类型。这样我们可以直接用 cvRelease 释放某个已知类型的对象、cvClone 复制一个,cvSave 和 cvLoad 实现该对象的存储。 cxcore 里面还有一些非常有用的功能,比如 cvCheckArr 检查有没有越界或者 NaN 类型。cvKMeans2 可以进行 kmeans 聚类,cvSeqPartition 用于将序列通过一个等价函数分成等价类。另外有一些用于出错处理的函数,比如每个 OpenCV 的函数源代码里面写的 CV_FUNCNAME( Name ) 就是用于报告出错函数的宏,等价于声明了一个静态的字符串,常用 CV_ERROR 报错,另有 CV_CHECK 检查出错代码,CV_CALL 提供统一的调用 cxcore 函数方法(自动 CV_CHECK),CV_ASSERT 判断条件(和 assert 类似)。另外有 cvGetErrStatus、cvSetErrStatus,设置出错模式 cvGet/SetErrMode(分 leaf 出错就退出,parent 调用 handler 后向上 unwind,silent 不调用 handler 直接向上 unwind),产生错误 cvError,可以用 cvErrorStr 获得解释。 和 OS 相关的函数,如 cvAlloc、cvFree,计算用时的 cvGetTickCount 和 cvgetTickFrequency,编写模块用的 cvRegisterModule、cvGetModuleInfo,另外还有获得线程、以及并行运算信息的函数,这里不加叙述了。 ml 这个库的结构相对简单,实现的 ML 的算法也仅仅那么几个最经典的,并不具有很好的扩展性。几乎所有的 ml 的模型都是继承 CvStatModel 这个类(其实是一个接口),主要有 clear() 清除模型,train() 训练,predict() 预测,以及 IO 相关的 save/load() 或者 read/write()。实现的算法有朴素贝叶斯分类器 CvNormalBayesClassifier,k-近邻 CvKNearest(不知道用了 kdtree 这些结构没),支持向量机 CvSVM(不支持用户自定义的核函数似乎,可以用 k-fold 交叉验证选择参数),决策树 CART CvDTree,集成算法 AdaBoost CvBoost 以及 boosted tree CvBoostTree、随机树 CvRTree、EM 算法 CvEM(仅仅对某些特定模型可以用),神经网络(两层前馈神经网络)CvANN,感觉就是可以用来做些简单的问题,但是不要指望能用到最新的一些模型。 原文链接:点击这里

1 Nov 2010

opencv轮廓检测函数

收藏到CSDN网摘



matlab用久了,人会变懒惰.一直没有读opencv的代码,苦苦寻找bwlabel和bwareaopen的类似函数而不得,肤色检测结果却必须经过去噪这一关,没辙,自己写吧.google到一篇博文,博主很牛,分析了matlab的bwlabe代码,参考博主的分析,我实现了我的bwareaopen第一版.