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

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

创新互联公司-专业网站定制、快速模板网站建设、高性价比乐山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式乐山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖乐山地区。费用合理售后完善,10余年实体公司更值得信赖。

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

下面描述比较重要的差异, 具体的细节可以参考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. x = cvCreateMat(m, n, type) for row in x:   
  2.  
  3.  # row is same as that returned by cvGetRow python> 
  4.  

通过列的方式迭代

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

切片方式

获取一行

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

获取一列

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

获取一个区域

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

获取一个元素

 
 
  1. 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. # 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.  

#p#

CvMatND

暂时还不支持. 如果您有兴趣自己实现的话, 请联系RomanStanchak.

CvSeq
python中访问CvSeq的代码:

 
 
  1. num_contours, contours = cv.cvFindContours(...)   
  2.  
  3. hrange iterates through h_next element   
  4. for contour in contours.hrange():   
  5.  
  6.    # contour is a CvSeq of points  
  7.    for pt in contour:  
  8.        print pt  
  9.    # alternately  
  10.    for pt in contour.vrange():  
  11.        print pt  
  12.    # alternately  
  13.    for i in range(contour.total):  
  14.        print contour[i] python> 
  15.  

交互命令行编程

python的最大优点是可以在交互命令行中开发程序. 交互shell编程和Matlab类似. 以下在命令行中显示一副图像的代码:

 
 
  1. from opencv.cv import * from opencv.highgui import *
  2.  cvStartWindowThread() cvNamedWindow("win") im
  3.  = cvLoadImage("pics/airplane.jpg") cvShowImage("win", im) python>   
  4.  

需要注意的是cvStartWindowThread函数, 它目前只支持linux系统. cvStartWindowThread 函数的目的是代替cvWaitKey()来实现窗口的自动刷新. 去掉cvWaitKey()函数之后, 程序的输入将不受cvWaitKey阻塞, 更便于shell交互.

Matlab语法

熟悉Matlab或SciPy的朋友, 可以更关注matlab_syntax模块. 该模块采用了和 Matlab/SciPy 类似的方法来创建数组. 很多情况下, 这比用OpenCV的标准函数更加便捷. 切换行号显示

 
 
  1. from opencv.cv import * from opencv.highgui import 
  2. * from opencv.matlab_syntax import * cvStartWindowThread() im = imread("pics/airplane.jpg") imshow(im) python>   
  3.  

当前题目:python接口与C语言功能不同之处
网站URL:http://www.shufengxianlan.com/qtweb/news12/151912.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联