《学习opencv》笔记——基本数据结构,CvMat,矩阵訪问
? ? 老板讓讓做一個(gè)東東。輸入端要用到opencv順便就來(lái)學(xué)習(xí)一下。買了本書(shū)《學(xué)習(xí)opencv》翻來(lái)一看,opencv1.0,去官網(wǎng)上一看。opencv2.49,瞬間有種蛋碎的趕腳。看著第二章介紹一個(gè)頭文件,在opencv2.49以下招了半天都沒(méi)找到。。。淚奔~~
? ? 只是看到一些論壇上說(shuō)。這本書(shū)里還是講了一些實(shí)用的算法的,所以還是決心細(xì)致讀一讀,里面的測(cè)試程序基本是親手輸入執(zhí)行成功的,非常多樣例我自也用不同的方法實(shí)現(xiàn)了一下,畢竟入門(mén)級(jí)新手。望各位老鳥(niǎo)勿噴。還請(qǐng)各位大手多多指點(diǎn)。
? ? ? ??
1.opencv基本數(shù)據(jù)結(jié)構(gòu):
| 結(jié)構(gòu) | 成員 | 意義 |
| CvPoint | int?x,y | 圖像中的點(diǎn) |
| CvPoint2D32f ? ?? | float?x,y | 二維空間中的點(diǎn) |
| CvPoint3D32f | float?x,y,z | 三維空間中的點(diǎn) |
| CvSize? | int?width,height | 圖像的尺寸 |
| CvRect | int?x,y,width,height | 圖像的部分區(qū)域 |
| CvScalar | double?val[4] | RGBA值 |
2.CvMat矩陣結(jié)構(gòu):
(1)兩點(diǎn)注意:
1.在Opencv中沒(méi)有向量結(jié)構(gòu),不論什么時(shí)候須要向量,都僅僅是一個(gè)列矩陣。
2.Opencv矩陣的概念與我們?cè)诰€性代數(shù)課上學(xué)習(xí)過(guò)的概念相比。更抽象,特別是矩陣的元素。
(2)CvMat結(jié)構(gòu):
typedef struct CvMat{int type;int step;int* refcount;union{uchar* ptr;short* s;int* i;float *f1;double* db;} data;union{int rows;int height;};union{int cols;int width;}; }CvMat;(3)矩陣的創(chuàng)建與釋放
CvMat*?cvCreateMat(?int?rows,?int?cols,?int?type?);??//創(chuàng)建一個(gè)矩陣
CvMat*?cvCreateMatHeader(?int?rows,?int?cols,?int?type?);?//創(chuàng)建一個(gè)矩陣結(jié)構(gòu),不分配空間
CvMat*?cvInitMatHeader(CvMat*?mat,int?rows,int?cols,int?type,void*?data?=?NULL,int?step?=?CV_AUTOSTEP);//用一個(gè)現(xiàn)有矩陣初始化矩陣
CvMat?cvMat(int?rows,int?cols,int?type,void*?data?=?NULL);//初始化矩陣結(jié)構(gòu),不分配空間
CvMat*?cvCloneMat(?const?cvMat*?mat?);//復(fù)制一個(gè)mat副本
void?cvReleaseMat(?CvMat**?mat?);?//釋放矩陣
(4)創(chuàng)建一個(gè)矩陣程序:
3.矩陣數(shù)據(jù)的存取(簡(jiǎn)單的方法。麻煩的方法,恰當(dāng)?shù)姆椒?
(1)簡(jiǎn)單的方法:
利用CV_MAT_ELEM()宏存取矩陣
另外宏CV_MAT_ELEM_PTR()須要三個(gè)參數(shù),傳入矩陣。待返回元素的行和列。
它和上個(gè)宏一樣。僅僅只是返回的是指向元素的指針。須要自己固定類型。
(2)麻煩的方法
使用cvPtr*D訪問(wèn)矩陣,其結(jié)構(gòu)為:
uchar* cvPtr1D(const CvArr* arr, //訪問(wèn)矩陣int idx0, //元素索引int* type = NULL//元素類型);uchar* cvPtr2D(const CvArr* arr,int idx0,int idx1,int* type = NULL);uchar* cvPtr3D(const CvArr* arr,int idx0,int idx1,int idx2,int* type = NULL);uchar* cvPtrND(const CvArr* arr,int* idx,int* type = NULL,int create_node = 1,unsigned* precalc_hashval = NULL);訪問(wèn)實(shí)例:
(3)恰當(dāng)?shù)姆椒?/span>
計(jì)算機(jī)視覺(jué)是一種密集型的任務(wù)。所以應(yīng)該利用最有效的方法做事。
方法:轉(zhuǎn)載于:https://www.cnblogs.com/lxjshuju/p/7008131.html
總結(jié)
以上是生活随笔為你收集整理的《学习opencv》笔记——基本数据结构,CvMat,矩阵訪问的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 知乎高赞回答!财务小白快速上手报表分析(
- 下一篇: 获取西刺代理IP构建代理池