python接口与C语言功能不同之处(1)


在正常情况下, OpenCV的python接口和C语言接口基本一致. 但是, 对于python接口实现比较困难的地方, 一些函数和结构体可能会有不同. 下面的描述就是有关此内容的详细介绍。希望会对你有所帮助。

函数接口也尽量保持和C语言一致. 最大的差异是在函数通过参数来返回值的时候. 由于python中有些基本的参数都不可改变的, 因此代替的方法是一次返回多个值. 同样, 大部分的结构和C语言中也有相似的功能, 但是语法可能有些不同.

  • Python socket服务如何进行配置详解
  • Python日志需要我们不断的学习
  • 了解Python多线程的创建程序
  • 探秘Python对象体系
  • 用Python标准库修改搜索引擎获取结果

下面描述比较重要的差异, 具体的细节可以参考python接口的代码.

没有IplImage

最大的差异是python接口中没有IplImage! 这主要是为了避免SWIG 在处理IplImage中隐含共享的不足. 以下是具体的替代方法:

原来返回IplImage的函数, 现在返回CvMat 原来读IplImage改为读CvMat ,CvMat中没有的IplImage属性被添加以支持IplImage, 例如height, width, depth, imageDataSize等. ROI和COI相关函数被禁止使用. 不过用户可以用cvGetSubRect/cvSplit/cvMerge来实现类似的功能.

迭代访问

CvMat扩展了python中的2个基本方法__iter__ 和 __getitem__, 来支持元素的简单访问.

通过行的方式迭代

  1. <python>x = cvCreateMat(m, n, type) for row in x:   
  2.  
  3.  # row is same as that returned by cvGetRowpython> 
  4.  

通过列的方式迭代

  1. <python>for col in x.colrange():   
  2.  # col is same as that returned by cvGetColpython> 

切片方式

 获取一行

  1. <python>row = x[i]python>   
  2.  

获取一列

  1. <python>col = x[:, i]python>  

获取一个区域

  1. <python>slice = x[0:10, 0:10]python>   
  2.  

获取一个元素

  1. <python>elem = x[i, j]   
  2.  
  3. or   
  4. elem = x[i][j]   
  5.  
  6. or if x is a vector   
  7. elem = x[i]python>   
  8.  

同样的方法可以用来修改元素

  1. <python># x and y are CvMat's x[0:10, 0:5] = y[10:20, 1:6] x[i, j]
  2.  = 1; x[:, :] = 1; x[:, :] = cvScalar(1); x[0:10, i]
  3.  = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]python>   
  4.  


相关内容

    暂无相关文章

评论关闭