Python教程系列:http://blog.csdn.net/sunny2038/article/details/9057415

与C++的不同之处:http://developer.51cto.com/art/201003/187863_all.htm

python接口功能的类似功能的介绍其中包括迭代访问、切片方式、如果你对python接口功能想有所了解的话,你可以浏览以下文章,会对你有所帮助。

AD:2013云计算架构师峰会课程资料下载

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

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

下面描述比较重要的差异, 具体的细节可以参考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__, 来支持元素的简单访问.

通过行的方式迭代


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

通过列的方式迭代


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

切片方式

 获取一行

<python>row = x[i]python>   

获取一列


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

获取一个区域

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

获取一个元素

<python>elem = x[i, j]
or
elem = x[i][j]
or if x is a vector
elem = x[i]python>

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

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

CvMatND

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

CvSeq

python中访问CvSeq的代码:

<python>num_contours, contours = cv.cvFindContours(...)
hrange iterates through h_next element
for contour in contours.hrange():
# contour is a CvSeq of points
for pt in contour:
print pt
# alternately
for pt in contour.vrange():
print pt
# alternately
for i in range(contour.total):
print contour[i]python>

交互命令行编程

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

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

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

Matlab语法

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

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

OpenCV的Python接口的更多相关文章

  1. opencv编译Python接口

    cmake-gui 配置 确认这些都正确 生成了CV2.so make install cv2.__version__ '3.0.0'

  2. Windows+Caffe+VS2013+python接口配置过程

    前段时间在笔记本上配置了Caffe框架,中间过程曲曲折折,但由于懒没有将详细过程总结下来,这两天又在一台配置较高的台式机上配置了Caffe,配置时便非常后悔当初没有写到博客中去,现已配置好Caffe, ...

  3. Caffe学习系列(13):数据可视化环境(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  4. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  5. ubuntu16.04 安装caffe以及python接口

    http://blog.csdn.net/qq_25073253/article/details/72571714http://blog.csdn.net/greed7480/article/deta ...

  6. caffe(13) 数据可视化(python接口)配置

    caffe程序是由c++语言写的,本身是不带数据可视化功能的.只能借助其它的库或接口,如opencv, python或matlab.大部分人使用python接口来进行可视化,因为python出了个比较 ...

  7. openCV for python的使用

    一.openCV简介 OpenCV是一个开源的跨平台计算机视觉库.它轻量级而且高效——由一系列 C 函数和少量C++类构成,同时提供了Python.Ruby.MATLAB等语言的接口,实现了图像处理和 ...

  8. 虹软最新版 python 接口 完整版

    虹软最新版 python 接口 完整版 当前开源的人脸检测模型,识别很多,很多小伙伴也踩过不少坑.相信不少使用过dlib和facenet人脸识别的小伙伴都有这样的疑惑,为什么论文里高达99.8以上的准 ...

  9. YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口

    本文将介绍 YOLOv4 官方 Darknet 实现,如何于 Ubuntu 18.04 编译,及使用 Python 接口. 主要内容有: 准备基础环境: Nvidia Driver, CUDA, cu ...

随机推荐

  1. 字符串函数(day11)

    使用存储区的地址作为返回值可以让调用 函数使用被调用函数的存储区 这种时候被调用函数需要提供一个指针类型 的存储区记录作为返回值的地址数据 不可以把非静态局部变量的地址作为返回值 使用 C语言里的文字 ...

  2. CodeVS 1013&1029

    若干二叉树遍历的数据结构题. Problem 1013 传送门:http://codevs.cn/problem/1013/ 本题是一个数据结构——二叉树遍历问题. 对二叉树,给定中序遍历序列(In- ...

  3. android网络类型之2G-3G切换

    在android手机‘设置’-‘移动网络类型’里可以看到有关网络类型的选项,一般默认为3G优先. 如果有需要在程序中切换网络类型的朋友,不妨试试下面的方法.这里提供了几种思路,虽然可能对待 手机的方式 ...

  4. lunix下的redis数据库操作——hash(哈希)

    哈希,形如:key : (field : value) 创建:(可以理解为users用户,name为xxx) hset users name xxx 查看: hget users name # &qu ...

  5. 合并目录中的txt文件

    txt 文件 合并 并 按章节 分隔 # -*- coding: utf8 -*- import os result_name = 'result.txt' def resplit_txt_in_fo ...

  6. HDU 2415 Bribing FIPA

    Bribing FIPA Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original I ...

  7. Spring Cloud Stream(十三)

    说明 对Spring Boot 和 Spring Integration的整合,通过Spring Cloud Stream能够简化消息中间件使用的复杂难度!让业务人员更多的精力能够花在业务层面 简单例 ...

  8. C#--async-await的用法

    NET 中的 async/await 异步编程 MSDN上的文章 **async与await最佳实践 需要先理解thread的用法,再掌握task的用法,才能力理解async和await的用法 usi ...

  9. POJ 2374

    挺水的一道线段树+DP题.可以从底往上添加线段,每添加线段之前查询端点所被覆盖的区间线段.再从最顶往下DP,每次从端点出发,递推覆盖该端点的区间线段的两端的值即可. #include <cstd ...

  10. Tomcat启动时载入某个servlet

    当我们做一个java项目时,有几个功能都须要载入servlet或者实现某个共同的方法,尽管我们一味地在每个功能中依次载入也不是不能够,可是当某个servlet 或者方法被频繁地载入和应用.我们将面向对 ...