OpenCV 數(shù)據(jù)結(jié)構(gòu)和圖像處理_第1頁(yè)
OpenCV 數(shù)據(jù)結(jié)構(gòu)和圖像處理_第2頁(yè)
OpenCV 數(shù)據(jù)結(jié)構(gòu)和圖像處理_第3頁(yè)
OpenCV 數(shù)據(jù)結(jié)構(gòu)和圖像處理_第4頁(yè)
OpenCV 數(shù)據(jù)結(jié)構(gòu)和圖像處理_第5頁(yè)
已閱讀5頁(yè),還剩31頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、OpenCV 數(shù)據(jù)類型和圖像處理周杉 OpenCVOpenCV基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)【基本數(shù)據(jù)類型】【基本數(shù)據(jù)類型】 點(diǎn):點(diǎn): CvPoint 、CvPoint2D32f、CvPoint3D32f 矩形框大?。壕匦慰虼笮。?CvSize 、CvSize2D32f 矩形框:矩形框: CvRect 可以存放可以存放1-41-4個(gè)數(shù)值的數(shù)組:個(gè)數(shù)值的數(shù)組: CvScalarCvScalar 矩陣:矩陣: CvMat 、CvMatND 、CvSparseMat IPLIPL圖像頭部:圖像頭部: IplImage 定義不確定的數(shù)組:定義不確定的數(shù)組: CvArr (僅作函數(shù)參數(shù))多

2、維稀疏矩陣多維稀疏矩陣OpenCVOpenCV基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)【點(diǎn)數(shù)據(jù)結(jié)構(gòu)】【點(diǎn)數(shù)據(jù)結(jié)構(gòu)】 CvPoint 二維坐標(biāo)系下的點(diǎn),類型為整型 typedef struct CvPoint int x; /* X坐標(biāo), 通常以0為基點(diǎn) */int y; /* y坐標(biāo), 通常以0為基點(diǎn) */CvPoint;inline CvPoint cvPoint( int x, int y ); /* 構(gòu)造函數(shù) */inline CvPoint cvPointFrom32f( CvPoint2D32f point ) /* 從 CvPoint2D32f類型轉(zhuǎn)換得來(lái) */ CvPoint

3、2D32f :二維坐標(biāo)下的點(diǎn),類型為浮點(diǎn) CvPoint3D32f :三維坐標(biāo)下的點(diǎn),類型為浮點(diǎn)OpenCVOpenCV基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)【矩形數(shù)據(jù)結(jié)構(gòu)】【矩形數(shù)據(jù)結(jié)構(gòu)】 CvSize 矩形框大小,以像素為精度 typedef struct CvSizeint width; /* 矩形寬 */int height; /* 矩形高 */CvSize;inline CvSize cvSize( int width, int height ); /* 構(gòu)造函數(shù)*/ CvSize2D32f OpenCVOpenCV基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)【矩形數(shù)據(jù)結(jié)構(gòu)】【

4、矩形數(shù)據(jù)結(jié)構(gòu)】 CvRect 矩形框的偏移和大小 typedef struct CvRectint x; /* 方形的最左角的x-坐標(biāo) */int y; /* 方形的最上或者最下角的y-坐標(biāo) */int width; /* 寬 */int height; /* 高 */CvRect;inline CvRect cvRect(int x, int y, int width, int height); /* 構(gòu)造函數(shù)*/OpenCVOpenCV基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)【矩陣矩陣數(shù)據(jù)結(jié)構(gòu)】數(shù)據(jù)結(jié)構(gòu)】 typedef struct CvMat int type; /* CvMat

5、標(biāo)識(shí) (CV_MAT_MAGIC_VAL), 元素類型和標(biāo)記 */ int step;/* 以字節(jié)為單位的行數(shù)據(jù)長(zhǎng)度*/ int* refcount; /* 內(nèi)部使用,數(shù)據(jù)引用計(jì)數(shù) */ union uchar* ptr;short* s; int* i; float* fl; double* db; data; /* data 指針 */ union int rows; int height; ; union int cols; int width; ; CvMat;int type; 矩陣通用矩陣數(shù)據(jù)類型: CV_(S|U|F)CS:帶符號(hào)整數(shù)U:無(wú)符號(hào)整數(shù)F:浮點(diǎn)數(shù)例:CV_8UC1:8

6、位無(wú)符號(hào)單通道矩陣; CV_32FC2:32位浮點(diǎn)數(shù)雙通道矩陣。int* refcount; /*數(shù)據(jù)引用計(jì)數(shù)*/ refcount=NULL: 矩陣的數(shù)據(jù)區(qū)為外部數(shù)據(jù),不需釋放 refcount!=NULL: 需要釋放矩陣頭和數(shù)據(jù)區(qū)。 int step; 以字節(jié)為單位的行數(shù)據(jù)長(zhǎng)度,是定位元素所需要的行信息。 unionuchar *ptr;short *s;int *i;float *fl;double *db;data; 指向數(shù)據(jù)區(qū)首地址的指針。指針是公用體結(jié)構(gòu),使用時(shí)要根據(jù)矩陣的數(shù)據(jù)類型選擇。 矩陣矩陣由寬度(width),高度(height),類型(type),行數(shù)據(jù)長(zhǎng)度(step,行

7、的長(zhǎng)度用字節(jié)表示而不是用整形或者浮點(diǎn)型長(zhǎng)度)和一個(gè)指向數(shù)據(jù)的指針構(gòu)成。 CvMatCvMat* * cvCreateMat(int rows,int cols,int type) cvCreateMat(int rows,int cols,int type) 該方法最簡(jiǎn)單,既設(shè)置了矩陣的頭部,又為數(shù)據(jù)部分分配了內(nèi)存空間,該函數(shù)是cvCreateMatHeader()和cvCreateData()的合并縮寫。 cvCreateMatHeader()cvCreateMatHeader() 只創(chuàng)建CvMat頭部,但不為數(shù)據(jù)部分分配空間。 cvCreateData()cvCreateData() 則是

8、為矩陣的數(shù)據(jù)部分分配了內(nèi)存空間。有時(shí)候,我們只需要cvCreateMatHeader()就可以了,因?yàn)榛谝恍┰颍覀兛赡芤呀?jīng)為數(shù)據(jù)部分分配了空間,或者此時(shí)分配空間還不是時(shí)候。 cvCloneMat(CvMatcvCloneMat(CvMat* *) ) 是從一個(gè)已經(jīng)有的矩陣,來(lái)“克隆”出一個(gè)新的 矩 陣 來(lái) 。 當(dāng) 我 們 不 再 需 要 某 矩 陣 時(shí) , 我 們 需 要 調(diào) 用 長(zhǎng)cvReleaseMat(CvMat*)來(lái)釋放它。矩陣的創(chuàng)建矩陣的創(chuàng)建typedef struct _IplImage int nSize; /* IplImage大小 */ int ID; /* 版本 (=

9、0)*/ int nChannels; /* 大多數(shù)OpenCV函數(shù)支持1,2,3 或4 個(gè)通道 */ int alphaChannel; /* 被OpenCV忽略 */ int depth; /* 像素的位深度:IPL_DEPTH_8U;IPL_DEPTH_8S; IPL_DEPTH_16U;IPL_DEPTH_16S;IPL_DEPTH_32S;IPL_DEPTH_32F and IPL_DEPTH_64F 可支持 */ char colorModel4; /* 被OpenCV忽略 */ char channelSeq4; /* 被OpenCV忽略 */ int dataOrder; /*

10、 0 - 交叉存取顏色通道, 1 - 分開(kāi)的顏色通道.cvCreateImage只能創(chuàng)建交叉存取圖像 */ int origin;/* 0 - 頂左結(jié)構(gòu),1 - 底左結(jié)構(gòu) (BMP風(fēng)格) */ int align; /* 圖像行排列 (4 or 8). OpenCV 用widthStep 代替 */IplImage:IPL 圖像頭圖像頭 接上一張PPT內(nèi)容: int width; /* 圖像寬像素?cái)?shù) */int height; /* 圖像高像素?cái)?shù)*/struct _IplROI *roi;/* 圖像感興趣區(qū)域. 當(dāng)該值非空只對(duì)該區(qū)域進(jìn)行處理 */struct _IplImage *maskRO

11、I; /* 在 OpenCV中必須置NULL */void *imageId; /* 同上*/ struct _IplTileInfo *tileInfo; /*同上*/ int imageSize; /* 圖像數(shù)據(jù)大小,單位字節(jié)*/ char *imageData; /* 指向第一行排列圖像數(shù)據(jù)的指針 */ int widthStep; /* 排列的圖像行大小,以字節(jié)為單位 */ int BorderMode4; /* 邊際結(jié)束模式, 被忽略*/ int BorderConst4; /* 邊際結(jié)束模式, 被忽略*/ char *imageDataOrigin; /* 指針指向一個(gè)不同的圖像數(shù)

12、據(jù)結(jié)構(gòu),是為了糾正圖像內(nèi)存分配準(zhǔn)備的 */ IplImage;圖像頭結(jié)構(gòu)圖像頭結(jié)構(gòu)int depth; 圖像通用數(shù)據(jù)類型: IPL_DEPTH_(S|U|F) S、U、F的意義同矩陣數(shù)據(jù)類型。 例:IPL_DEPTH_8U:8位無(wú)符號(hào)整數(shù)圖像 IPL_DEPTH_32F:32位浮點(diǎn)數(shù)圖像int nChannels;圖像的通道數(shù)例:灰度圖為1個(gè)通道復(fù)值圖像為2個(gè)通道RGB圖像為3個(gè)通道RGBA圖像為4個(gè)通道(A通道即阿爾法通道) 大多數(shù)OpenCV函數(shù)支持14個(gè)通道 int dataOrder; 圖像數(shù)據(jù)的存儲(chǔ)格式 0 :交叉存取顏色通道 1:分開(kāi)存取顏色通道 OpenCV函數(shù)只支持交叉存取的圖

13、像。int widthStep; 排列的圖像行長(zhǎng)度行長(zhǎng)度,以字節(jié)為單位,與矩陣結(jié)構(gòu)中的step成員相似。struct _IplROI *roi; ROI:Region Of Interest(感興趣區(qū)域)roi=NULL:整幅圖像參與運(yùn)算roi!=NULL:ROI區(qū)域代替圖像參加運(yùn)算ROI的操作:cvSetImageROI():設(shè)置ROI區(qū)域cvResetImageROI():取消ROI區(qū)域cvGetImageROI():得到ROI區(qū)域int origin; 圖像像素的起始方式 origin=0:頂-左結(jié)構(gòu) origin=1:底-左結(jié)構(gòu)(windows風(fēng)格)char *imageData; 圖

14、像的數(shù)據(jù)區(qū) char *類型而非unsigned char *類型,進(jìn)行浮 點(diǎn)處理時(shí)可能要加到unsigned char的轉(zhuǎn)換,否則會(huì)導(dǎo)致結(jié)果不正常。 CvArr:不確定數(shù)組 只用作函數(shù)的參數(shù) 表示可接受多種類型的輸入形式 (矩陣等) 運(yùn)行時(shí)通過(guò)分析數(shù)組頭的前4個(gè)字節(jié)來(lái)判斷 大多數(shù)CvArr*做輸出參數(shù)的情況下,函數(shù)是對(duì)CvArr的結(jié)構(gòu)進(jìn)行寫入操作而不是返回指針不確定數(shù)組不確定數(shù)組圖像處理圖像處理 平滑處理* 圖像形態(tài)學(xué)* 漫水填充算法 尺寸調(diào)整 圖像金字塔 閾值化一、平滑處理一、平滑處理 “平滑處理”也稱“模糊處理”,是一項(xiàng)簡(jiǎn)單而且使用頻率很高的圖像處理方法。常用作處理圖像上的噪聲或者失真。

15、降低圖像分辨率時(shí),平滑處理是很重要的。 目前,OpenCV可以提供五種不同的平滑處理操作方法,所有操作都有cvsmoothcvsmooth函數(shù)函數(shù)實(shí)現(xiàn),該函數(shù)可以將用戶所期望的平滑方式作為參數(shù)。 void cvSmooth( const CvArr* src, CvArr* dst, int smoothtype = CV_GAUSSIAN, int param1 = 3, int param2 = 0, double param3 = 0, double param4 = 0 );各種平滑處理實(shí)驗(yàn)結(jié)果對(duì)比圖各種平滑處理實(shí)驗(yàn)結(jié)果對(duì)比圖圖1:簡(jiǎn)單模糊處理圖2:中值濾波模糊處理圖3:高斯模糊圖4:

16、雙邊濾波二、圖像形態(tài)學(xué)二、圖像形態(tài)學(xué) OpenCV為進(jìn)行圖像的形態(tài)學(xué)變換提供了快速、方便的函數(shù)?;拘螒B(tài)轉(zhuǎn)換是膨脹與腐蝕,他們能實(shí)現(xiàn)多種功能:例如消除噪聲、分割出獨(dú)立的圖像元素以及在圖像中連接相鄰的元素。形態(tài)學(xué)也常被用于尋找圖像中的明顯的極大值區(qū)域或極小值區(qū)域以及求出圖像的梯度。腐蝕腐蝕: : 刪除對(duì)象邊界某些像素刪除對(duì)象邊界某些像素 腐蝕是膨脹的反操作。腐蝕操作要計(jì)算核區(qū)域像素的最小值最小值。 當(dāng)核B與圖像卷積時(shí),計(jì)算被B覆蓋區(qū)域的最小像素值,并把這個(gè)值放到參考點(diǎn)上。形態(tài)腐蝕:在核B之下取最小像素值腐蝕腐蝕-設(shè)計(jì)思想設(shè)計(jì)思想結(jié)構(gòu)元素結(jié)構(gòu)元素原二值圖腐蝕后的圖 設(shè)計(jì)一個(gè)結(jié)構(gòu)元素,結(jié)構(gòu)元素的原點(diǎn)

17、定位在待處理的目標(biāo)像素目標(biāo)像素上,通過(guò)判斷是否覆蓋,來(lái)確定是否該點(diǎn)被腐蝕掉。 掃描原圖,找到第一個(gè)掃描原圖,找到第一個(gè)像素值為像素值為1的背景點(diǎn)。判斷該結(jié)構(gòu)元素所覆蓋的像的背景點(diǎn)。判斷該結(jié)構(gòu)元素所覆蓋的像素值素值是否是否全部全部為為1。如果是,則腐蝕后圖像中的相同位置上的像素值為1;如果不是,則腐蝕后圖像中的相同位置上的像素值為0。腐蝕腐蝕-應(yīng)用示例應(yīng)用示例1 1 腐蝕處理腐蝕處理可以將粘連在一起的不同目標(biāo)物分離,可以將粘連在一起的不同目標(biāo)物分離,并可以將小的顆粒噪聲去除。并可以將小的顆粒噪聲去除。(a)原圖(b)腐蝕1次(c)腐蝕2次圖像的腐蝕效果腐蝕腐蝕-應(yīng)用示例應(yīng)用示例2 2(a)原圖(

18、b)腐蝕2次膨脹膨脹: : 給圖像中的對(duì)象邊界添加像素給圖像中的對(duì)象邊界添加像素形態(tài)學(xué)膨脹:在核B下取最大像素值 膨脹膨脹是將與目標(biāo)區(qū)域的背景點(diǎn)合并到該目標(biāo)物中,使目標(biāo)物邊界向外部擴(kuò)張的處理。 膨脹膨脹可以用來(lái)填補(bǔ)目標(biāo)區(qū)域中存在的某些空洞,以及清除包含在目標(biāo)區(qū)域中的小顆粒噪聲。膨脹膨脹-設(shè)計(jì)思想設(shè)計(jì)思想 設(shè)計(jì)一個(gè)結(jié)構(gòu)元素,結(jié)構(gòu)元素的原點(diǎn)定位在設(shè)計(jì)一個(gè)結(jié)構(gòu)元素,結(jié)構(gòu)元素的原點(diǎn)定位在背景像素背景像素上,判斷是否覆蓋有目標(biāo)點(diǎn),來(lái)確定是上,判斷是否覆蓋有目標(biāo)點(diǎn),來(lái)確定是否該點(diǎn)被膨脹為目標(biāo)點(diǎn)。否該點(diǎn)被膨脹為目標(biāo)點(diǎn)。 掃描原圖,找到第一個(gè)掃描原圖,找到第一個(gè)像素值為像素值為0 0的背景點(diǎn)。的背景點(diǎn)。判斷該結(jié)構(gòu)元素所覆蓋的像素值判斷該結(jié)構(gòu)元素所覆蓋的像素值是否是否存在存在為為1 1的目的目標(biāo)點(diǎn)標(biāo)點(diǎn)。結(jié)構(gòu)元素結(jié)構(gòu)元素膨脹膨脹-應(yīng)用示例應(yīng)用示例1 1 膨脹處理可以將斷裂開(kāi)的目標(biāo)物進(jìn)行合 并,便于對(duì)其整體的提取。膨脹膨脹-應(yīng)用示例應(yīng)用示例2 2(2)原圖(b)膨脹一次CvScalar CvScalar 如何賦值呢?如何賦值呢? 1. inline CvScalar cvScalarcvScalar( double val=0, double val1=0,double val2=

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論