新聞中心
在正常情況下, OpenCV的python接口和C語(yǔ)言接口基本一致. 但是, 對(duì)于python接口實(shí)現(xiàn)比較困難的地方, 一些函數(shù)和結(jié)構(gòu)體可能會(huì)有不同. 下面的描述就是有關(guān)此內(nèi)容的詳細(xì)介紹。希望會(huì)對(duì)你有所幫助。

創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比樂(lè)山網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式樂(lè)山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋樂(lè)山地區(qū)。費(fèi)用合理售后完善,10余年實(shí)體公司更值得信賴。
函數(shù)接口也盡量保持和C語(yǔ)言一致. 最大的差異是在函數(shù)通過(guò)參數(shù)來(lái)返回值的時(shí)候. 由于python中有些基本的參數(shù)都不可改變的, 因此代替的方法是一次返回多個(gè)值. 同樣, 大部分的結(jié)構(gòu)和C語(yǔ)言中也有相似的功能, 但是語(yǔ)法可能有些不同. #t#
下面描述比較重要的差異, 具體的細(xì)節(jié)可以參考python接口的代碼.
沒(méi)有IplImage
最大的差異是python接口中沒(méi)有IplImage! 這主要是為了避免SWIG 在處理IplImage中隱含共享的不足. 以下是具體的替代方法:
原來(lái)返回IplImage的函數(shù), 現(xiàn)在返回CvMat 原來(lái)讀IplImage改為讀CvMat ,CvMat中沒(méi)有的IplImage屬性被添加以支持IplImage, 例如height, width, depth, imageDataSize等. ROI和COI相關(guān)函數(shù)被禁止使用. 不過(guò)用戶可以用cvGetSubRect/cvSplit/cvMerge來(lái)實(shí)現(xiàn)類似的功能.
迭代訪問(wèn)
CvMat擴(kuò)展了python中的2個(gè)基本方法__iter__ 和 __getitem__, 來(lái)支持元素的簡(jiǎn)單訪問(wèn).
通過(guò)行的方式迭代
x = cvCreateMat(m, n, type) for row in x: - # row is same as that returned by cvGetRow python>
通過(guò)列的方式迭代
for col in x.colrange(): - # col is same as that returned by cvGetCol python>
切片方式
獲取一行
row = x[i] python>
獲取一列
col = x[:, i] python>
獲取一個(gè)區(qū)域
slice = x[0:10, 0:10] python>
獲取一個(gè)元素
elem = x[i, j] - or
- elem = x[i][j]
- or if x is a vector
- elem = x[i] python>
同樣的方法可以用來(lái)修改元素
# 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>
#p#
CvMatND
暫時(shí)還不支持. 如果您有興趣自己實(shí)現(xiàn)的話, 請(qǐng)聯(lián)系RomanStanchak.
CvSeq
python中訪問(wèn)CvSeq的代碼:
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的最大優(yōu)點(diǎn)是可以在交互命令行中開(kāi)發(fā)程序. 交互shell編程和Matlab類似. 以下在命令行中顯示一副圖像的代碼:
from opencv.cv import * from opencv.highgui import * - cvStartWindowThread() cvNamedWindow("win") im
- = cvLoadImage("pics/airplane.jpg") cvShowImage("win", im) python>
需要注意的是cvStartWindowThread函數(shù), 它目前只支持linux系統(tǒng). cvStartWindowThread 函數(shù)的目的是代替cvWaitKey()來(lái)實(shí)現(xiàn)窗口的自動(dòng)刷新. 去掉cvWaitKey()函數(shù)之后, 程序的輸入將不受cvWaitKey阻塞, 更便于shell交互.
Matlab語(yǔ)法
熟悉Matlab或SciPy的朋友, 可以更關(guān)注matlab_syntax模塊. 該模塊采用了和 Matlab/SciPy 類似的方法來(lái)創(chuàng)建數(shù)組. 很多情況下, 這比用OpenCV的標(biāo)準(zhǔn)函數(shù)更加便捷. 切換行號(hào)顯示
from opencv.cv import * from opencv.highgui import - * from opencv.matlab_syntax import * cvStartWindowThread() im = imread("pics/airplane.jpg") imshow(im) python>
網(wǎng)站名稱:python接口與C語(yǔ)言功能不同之處
當(dāng)前地址:http://fisionsoft.com.cn/article/dppigjh.html


咨詢
建站咨詢
