opencv常用函式及資料結構

2022-12-15 18:42:04 字數 5481 閱讀 8370

1.cvcreateimage

建立頭並分配資料

iplimage* cvcreateimage( cvsize size, int depth, int channels );size:影象寬、高.

depth:影象元素的位深度,可以是下面的其中之一:ipl_depth_8u -無符號8位整型ipl_depth_8s -有符號8位整型ipl_depth_16u -無符號16位整型ipl_depth_16s -有符號16位整型ipl_depth_32s -有符號32位整型ipl_depth_32f -單精度浮點數ipl_depth_64f -雙精度浮點數channels:

每個元素(畫素)通道號.可以是1, 2, 3或4.通道是交叉訪問的,例如通常的彩色影象資料排列是:

b0 g0 r0 b1 g1 r1 ...雖然通常ipl圖象格式可以存貯非交叉訪問的影象,並且一些opencv也能處理他,但是這個函式只能建立交叉訪問影象.

基本資料型別之一。表示矩陣框大小,以畫素為精度。與cvpoint結構類似,但資料成員是integer型別的width和height。

typedef struct cvsizecvsize;

width:矩形寬height:矩形高

影象大小變換

voidcvresize(constcvarr*src,cvarr*dst,intinterpolation=cv_inter_linear );src:輸入影象.dst:

輸出影象.

interpolation:插值方法:

cv_inter_nn -最近鄰插值,

cv_inter_linear -雙線性插值(預設使用)

cv_inter_area -使用象素關係重取樣。當影象縮小時候,該方法可

以避免波紋出現。當影象放大時,類似於cv_inter_nn方法..cv_inter_cubic -立方插值.

函式cvresize將影象src改變尺寸得到與dst同樣大小。若設定roi,函式將按常規支援roi.

各種方法的影象平滑

void cvsmooth( const cvarr* src, cvarr* dst,int smoothtype=cv_gaussian,int param1=3, int param2=0, double param3=0, double param4=0 );

src:輸入影象.

4.cvsoomth

dst:輸出影象.

smoothtype:平滑方法.

cv_blur_no_scale(簡單不帶尺度變換的模糊)-對每個象素的

param1×param2領域求和。如果鄰域大小是

變化的,可以事先利用函式cvintegral計算積分影象。

cv_blur (****** blur) -對每個象素param1×param2鄰域求和並做尺

度變換1/(param1param2).

cv_gaussian(gaussianblur)-對影象進行核大小為param1×param2

的高斯卷積

cv_median (median blur)-對影象進行核大小為param1×param1的

中值濾波(鄰域是方的).

cv_bilateral(雙向濾波)-應用雙向3x3濾波,彩色

sigma=param1,空間sigma=平滑操作的第乙個引數.

param2:平滑操作的第二個引數.對於簡單/非尺度變換的高斯模糊的情況,如果param2的值為零,則表示其被設定為param1。

param3:對應高斯引數的gaussian sigma (標準差).如果為零,則標準差由下面的核尺寸計算:

sigma = (n/2 - 1)*0.3 + 0.8,其中n=param1對應水平核,n=param2對應垂直核.

詳情請參照opencv中文參考手冊

5.cvreleaseimage

釋放影象資料

void cvreleaseimage( iplimage** image );image:雙指標指向影象記憶體分配單元。

//iplimage* img=cvcreateimage(cvsize(640,480),ipl_depth_8u,1);//cvreleaseimage(&img);

返回矩陣或影象roi的大小(roi:region of interest感興趣區域)cvsize cvgetsize( const cvarr* arr );arr:陣列頭。

即乙個位址

函式cvgetsize返回影象或矩陣的行數和列數,如果是影象就返回roi的大小。

製作影象的完整拷貝

iplimage* cvcloneimage( const iplimage* image );

image:原影象.

函式cvcloneimage製作影象的完整拷貝包括頭、roi和資料

8.cvcvtcolor

色彩空間轉換

void cvcvtcolor( const cvarr* src, cvarr* dst, int code );

src:輸入的8-bit , 16-bit或32-bit單倍精度浮點數影像。dst:

輸出的8-bit , 16-bit或32-bit單倍精度浮點數影像。code:彩空間轉換,通過定義cv_2常數

cv_bgr2gray:色彩影象轉換為灰度影象請參考opencv中文手冊p268

僅作為函式定義的引數使用,

表明函式可以接受不同型別的矩陣作為引數,

例如:iplimage*, cvmat*甚至是cvseq*.

矩陣的型別通過矩陣頭的前4個位元組資訊來確定

10.cvconvertscale

使用線性變換轉換陣列

voidcvconvertscale(constcvarr*src,cvarr*dst,doublescale=1,doubleshift = 0 );

src:輸入陣列.dst:輸出陣列scale:比例因子.

shift:該加數被加到輸入陣列元素按比例縮放後得到的元素上dst(i)=src(i)*scale +(shift,shift,...)

即若scale=1,shift=0,則輸出與輸入是同一影象。

cvmemstorage

cvsub(ma, mb, mc); // ma-mb -> mc

growing memory storagetypedef struct cvmemstorage cvmemstorage;

記憶體儲存器是乙個可用來儲存諸如序列,輪廓,圖形,子劃分等動態增長資料結構的底層結構。它是由一系列以

同等大小的記憶體塊構成,呈列表型---bottom域指的是列首,top域指的是當前指向的塊但未必是列

尾.在bottom和top之間所有的塊(包括bottom,不包括top)被完全佔據了空間;在top和列尾之間所有的塊

(包括塊尾,不包括top)則是空的;而top塊本身則被佔據了部分空間--free_space指的是top塊剩餘的空位元組數。

seqpopfront

可動態增長元素序列growable sequence of elements見p109

刪除序列的頭部元素

void cvseqpopfront( cvseq* seq, void* element=null );

seq:序列

element:可選引數。如果該指標不為空,就拷貝被刪除元素到指標指向的位置。

函式cvseqpopfront刪除序列的頭部元素。如果序列已經為空,就報告一錯誤。函式時間複雜度為o(1).

建立一串行

cvseq* cvcreateseq( int seq_flags, int header_size, int elem_size,cvmemstorage* storage );seq_flags:序列的符號標誌。如果序列不會被傳遞給任何使用特定序列的函

15.cvcreateseq

數,那麼將它設為0,否則從預定義的序列型別中選擇一合適的型別。header_size:序列頭部的大小;必須大於或等於sizeof(cvseq).

如果制定了型別或它的副檔名,則此型別必須適合基類的頭部大小。

elem_size:元素的大小,以位元組計。這個大小必須與序列型別相一致。

例如,對於乙個點的序列,元素型別cv_seq_eltype_point應當被指定,引數elem_size必須等同於sizeof(cvpoint).

函式cvcreateseq建立一串行並且返回指向該序列的指標。函式在儲存塊中分配序列的頭部作為乙個連續軀體,並且設定結構的flags域, elem_size域, header_size域和storage域的值為被傳遞過來的值,設定delta_elems為預設值(可通過函式cvsetseqblocksize重新對其賦值),清空其他的頭部域,包括前sizeof(cvseq)個位元組的空間。

新增元素到序列的尾部

char* cvseqpush( cvseq* seq, void* element=null );seq:塊

element:新增的元素

函式cvseqpush在序列塊的尾部新增一元素並返回指向該元素得指標。如果輸入引數為null,函式就僅僅分配一空間,留給下乙個元素使用。**說明如何使用該函式去建立一空間請見p112。

返回索引所指定的元素指標

char* cvgetseqelem( const cvseq* seq, int index );#definecv_get_seq_elem(type,seq,index)(type*)cvgetseqelem( (cvseq*)(seq), (index) )seq:序列index:索引

函式cvgetseqelem查詢序列中索引所指定的元素,並返回指向該元素的指標。如果元素不存在,則返回0。

函式支援負數,即:-1代表序列的最後乙個元素,-2代表最後第二個元素,等。

如果序列只包含乙個塊,或者所需的元素在第乙個塊中,那麼應當使用巨集。見下18

返回索引所指定的元素指標如果序列只包含乙個塊,或者所需的元素在第乙個塊中,那麼應當使用巨集,cv_get_seq_elem( elemtype, seq, index )巨集中的引數

elemtype:是序列中元素的型別(如:cvpoint),seq:表示序列

index:代表所需元素的索引。

該巨集首先核查所需的元素是否屬於第乙個塊,如果是,則返回該元素,否則,該巨集就呼叫主函式getseqelem.如果索引為負數的話,則總是呼叫函式cvgetseqelem。函式的時間複雜度為o(1),假設塊的大小要比元素的數量要小。

轉換浮點數為整數int cvround( double value );int cvfloor( double value );

17.getseqelem

18.cv_get_seq_elem

19.round, floor,ceil

int cvceil( double value );

value:輸入浮點值

函式cvround, cvfloor, cvceil用一種捨入方法將輸入浮點數轉換成整數。cvround返回和引數最接近的整數值。cvfloor返回不大於引數的最大整數值。

cvceil返回不小於引數的最小整數值。在某些體系結構中該函式工作起來比標準c操作起來還要快。如果引數的絕對值大於231,結果是不可預料的。

對特殊值(±inf, nan)未進行處理。

常用的資料結構以及演算法

一 關於資料的幾個概念 1 資料。是對客觀事物的符號表示。在電腦科學是指所有能夠輸入到計算機中並能被 電腦程式處理的符號集合。包括數值 文字 影象 影象 音訊 等形式。2 資料項。所謂資料項就是資料中具有獨立含義的 不可再分割的最小資料單位。是客 觀實體一種特徵的資料表示。3 資料元素。是多個相關資...

資料結構與拓撲資料結構

資料結構在gis中對於資料的採集 儲存 查詢 檢索和應用分析等操作方式有著重要的影響,一種高效率的資料結構應該具備以下幾個要求 1 組織的資料能夠表示要素之間的層次關係,便於不同資料聯絡於覆蓋 2 正確反映地理實體之間的空間排列方式和各實體之間的相互關係 3 便於訪問與檢索 4 節省儲存空間,減少資...

資料結構試題及答案

資料結構試卷 一 一 單選題 每題 2 分,共20分 1.棧和佇列的共同特點是 a a.只允許在端點處插入和刪除元素 b.都是先進後出 c.都是先進先出 d.沒有共同點 2.用鏈結方式儲存的佇列,在進行插入運算時 d a.僅修改頭指標b.頭 尾指標都要修改 c.僅修改尾指標d.頭 尾指標可能都要修改...