亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? opencv學習筆記(三)人臉檢測的代碼分析.txt

?? opencv的學習筆記
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
?談論 OpenCV學習筆記(三)人臉檢測的代碼分析 


 
        
        一、預備知識:
        1、動態內存存儲及操作函數
        CvMemStorage
        typedef struct CvMemStorage
        {
            struct CvMemBlock* bottom;/* first allocated block */
            struct CvMemBlock* top; /* the current memory block - top of the 
        stack */
            struct CvMemStorage* parent; /* borrows new blocks from */
            int block_size; /* block size */
            int free_space; /* free space in the top block (in bytes) */
        } CvMemStorage;
        內存存儲器是一個可用來存儲諸如序列,輪廓,圖形,子劃分等動態增長數據結構的底層結構。它是由一系列以同等大小的內存塊構成,呈列表型 
        ---bottom 域指的是列首,top 域指的是當前指向的塊但未必是列尾.在bottom和top之間所有的塊(包括bottom, 
        不包括top)被完全占據了空間;在 top和列尾之間所有的塊(包括塊尾,不包括top)則是空的;而top塊本身則被占據了部分空間 -- 
        free_space 指的是top塊剩余的空字節數。新分配的內存緩沖區(或顯示的通過 cvMemStorageAlloc 函數分配,或隱示的通過 
        cvSeqPush, 
        cvGraphAddEdge等高級函數分配)總是起始于當前塊(即top塊)的剩余那部分,如果剩余那部分能滿足要求(夠分配的大小)。分配后,free_space 
        就減少了新分配的那部分內存大小,外加一些用來保存適當列型的附加大小。當top塊的剩余空間無法滿足被分配的塊(緩沖區)大小時,top塊的下一個存儲塊被置為當前塊(新的top塊) 
        --  free_space 
        被置為先前分配的整個塊的大小。如果已經不存在空的存儲塊(即:top塊已是列尾),則必須再分配一個新的塊(或從parent那繼承,見 
        cvCreateChildMemStorage)并將該塊加到列尾上去。于是,存儲器(memory storage)就如同棧(Stack)那樣, 
        bottom指向棧底,(top, free_space)對指向棧頂。棧頂可通過 cvSaveMemStoragePos保存,通過 
        cvRestoreMemStoragePos 恢復指向, 通過 cvClearStorage 重置。
        CvMemBlock
        內存存儲塊結構
        typedef struct CvMemBlock
        {
            struct CvMemBlock* prev;
            struct CvMemBlock* next;
        } CvMemBlock;
        CvMemBlock 代表一個單獨的內存存儲塊結構。 內存存儲塊中的實際數據存儲在 header塊 之后(即:存在一個頭指針 head 指向的塊 
        header ,該塊不存儲數據),于是,內存塊的第 i 個字節可以通過表達式 ((char*)(mem_block_ptr+1))[i] 
        獲得。然而,通常沒必要直接去獲得存儲結構的域。
        CvMemStoragePos
        內存存儲塊地址
        typedef struct CvMemStoragePos
        {
            CvMemBlock* top;
            int free_space;
        } CvMemStoragePos;
        該結構(如以下所說)保存棧頂的地址,棧頂可以通過 cvSaveMemStoragePos 保存,也可以通過 
        cvRestoreMemStoragePos 恢復。
        ________________________________________
        cvCreateMemStorage
        創建內存塊
        CvMemStorage* cvCreateMemStorage( int block_size=0 );
         block_size:存儲塊的大小以字節表示。如果大小是 0 byte, 則將該塊設置成默認值  當前默認大小為64k.
        函數 cvCreateMemStorage 創建一內存塊并返回指向塊首的指針。起初,存儲塊是空的。頭部(即:header)的所有域值都為 
        0,除了 block_size 外.
        ________________________________________
        cvCreateChildMemStorage
        創建子內存塊
        CvMemStorage* cvCreateChildMemStorage( CvMemStorage* parent );
        parent    父內存塊
        函數 cvCreateChildMemStorage 
        創建一類似于普通內存塊的子內存塊,除了內存分配/釋放機制不同外。當一個子存儲塊需要一個新的塊加入時,它就試圖從parent 
        那得到這樣一個塊。如果 parent 中 還未被占據空間的那些塊中的第一個塊是可獲得的,就獲取第一個塊(依此類推),再將該塊從 parent  
        那里去除。如果不存在這樣的塊,則 parent 要么分配一個,要么從它自己 parent (即:parent 的 parent) 
        那借個過來。換句話說,完全有可能形成一個鏈或更為復雜的結構,其中的內存存儲塊互為 child/ parent 
        關系(父子關系)。當子存儲結構被釋放或清除,它就把所有的塊還給各自的 parent. 在其他方面,子存儲結構同普通存儲結構一樣。
        子存儲結構在下列情況中是非常有用的。想象一下,如果用戶需要處理存儲在某個塊中的動態數據,再將處理的結果存放在該塊中。在使用了最簡單的方法處理后,臨時數據作為輸入和輸出數據被存放在了同一個存儲塊中,于是該存儲塊看上去就類似下面處理后的樣子: 
        Dynamic data processing without using child storage. 
        結果,在存儲塊中,出現了垃圾(臨時數據)。然而,如果在開始處理數據前就先建立一個子存儲塊,將臨時數據寫入子存儲塊中并在最后釋放子存儲塊,那么最終在 
        源/目的存儲塊 (source / destination storage) 中就不會出現垃圾, 
        于是該存儲塊看上去應該是如下形式:Dynamic data processing using a child storage.
        cvReleaseMemStorage
        釋放內存塊
        void cvReleaseMemStorage( CvMemStorage** storage );
        storage: 指向被釋放了的存儲塊的指針
        函數 cvReleaseMemStorage 釋放所有的存儲(內存)塊 或者 將它們返回給各自的 parent(如果需要的話)。 接下來再釋放 
        header塊(即:釋放頭指針 head 指向的塊 = free(head))并清除指向該塊的指針(即:head = NULL)。在釋放作為 
        parent 的塊之前,先清除各自的 child 塊。
        cvClearMemStorage
        清空內存存儲塊
        void cvClearMemStorage( CvMemStorage* storage );
        storage:存儲存儲塊
        函數 cvClearMemStorage 將存儲塊的 top 
        置到存儲塊的頭部(注:清空存儲塊中的存儲內容)。該函數并不釋放內存(僅清空內存)。假使該內存塊有一個父內存塊(即:存在一內存塊與其有父子關系),則函數就將所有的塊返回給其 
        parent.
        cvMemStorageAlloc
        在存儲塊中分配以內存緩沖區
        void* cvMemStorageAlloc( CvMemStorage* storage, size_t size );
        storage:內存塊. 
        size:緩沖區的大小.
        函數 cvMemStorageAlloc 
        在存儲塊中分配一內存緩沖區。該緩沖區的大小不能超過內存塊的大小,否則就會導致運行時錯誤。緩沖區的地址被調整為CV_STRUCT_ALIGN 字節 
        (當前為 sizeof(double)). 
        cvMemStorageAllocString
        在存儲塊中分配一文本字符串
        typedef struct CvString
        {
            int len;
            char* ptr;
        }
        CvString;
        CvString cvMemStorageAllocString( CvMemStorage* storage, const char* 
        ptr, int len=-1 );
        storage:存儲塊
        ptr:字符串
        len:字符串的長度(不計算'\0')。如果參數為負數,函數就計算該字符串的長度。
        函數 cvMemStorageAlloString 
        在存儲塊中創建了一字符串的拷貝。它返回一結構,該結構包含字符串的長度(該長度或通過用戶傳遞,或通過計算得到)和指向被拷貝了的字符串的指針。
        cvSaveMemStoragePos
        保存內存塊的位置(地址)
        void cvSaveMemStoragePos( const CvMemStorage* storage, CvMemStoragePos* 
        pos );
        storage:內存塊. 
        pos:內存塊頂部位置。
        函數 cvSaveMemStoragePos 將存儲塊的當前位置保存到參數 pos 中。 函數 cvRestoreMemStoragePos 
        可進一步獲取該位置(地址)。
        cvRestoreMemStoragePos
        恢復內存存儲塊的位置
        void cvRestoreMemStoragePos( CvMemStorage* storage, CvMemStoragePos* pos 
        );
        storage:內存塊. 
        pos:新的存儲塊的位置
        函數 cvRestoreMemStoragePos 通過參數 pos 恢復內存塊的位置。該函數和函數 cvClearMemStorage 
        是釋放被占用內存塊的唯一方法。注意:沒有什么方法可去釋放存儲塊中被占用的部分內存。
        2、分類器結構及操作函數:
        CvHaarFeature
        #define CV_HAAR_FEATURE_MAX  3
        typedef struct CvHaarFeature
        {
            int  tilted;  
            struct
            {
                CvRect r;
                float weight;
        } rect[CV_HAAR_FEATURE_MAX]; 
         
        }
        CvHaarFeature;
        一個 harr 特征由 2-3 個具有相應權重的矩形組成
        titled :/* 0 means up-right feature, 1 means 45--rotated feature */
        rect[CV_HAAR_FEATURE_MAX];  /* 2-3 rectangles with weights of opposite 
        signs and       with absolute values inversely proportional to the areas 
        of the rectangles. if rect[2].weight !=0, then  the feature consists of 
        3 rectangles, otherwise it consists of 2 */
        CvHaarClassifier
        typedef struct CvHaarClassifier
        {
            int count;  
            CvHaarFeature* haar_feature;
            float* threshold;
            int* left;
            int* right;
            float* alpha;
        }
        CvHaarClassifier;
        /* a single tree classifier (stump in the simplest case) that returns 
        the response for the feature   at the particular image location (i.e. 
        pixel sum over subrectangles of the window) and gives out a value 
        depending on the responce */
        int count;  /* number of nodes in the decision tree */
         /* these are "parallel" arrays. Every index i corresponds to a node of 
        the decision tree (root has 0-th index).
        left[i] - index of the left child (or negated index if the left child is 
        a leaf)
        right[i] - index of the right child (or negated index if the right child 
        is a leaf)
        threshold[i] - branch threshold. if feature responce is <= threshold, 
        left branch                      is chosen, otherwise right branch is 
        chosed.
        alpha[i] - output value correponding to the leaf. */
        CvHaarStageClassifier
        typedef struct CvHaarStageClassifier
        {
            int  count;  /* number of classifiers in the battery */
            float threshold; /* threshold for the boosted classifier */
            CvHaarClassifier* classifier; /* array of classifiers */
            /* these fields are used for organizing trees of stage classifiers,
               rather than just stright cascades */
            int next;
            int child;
            int parent;
        }
        CvHaarStageClassifier;

        /* a boosted battery of classifiers(=stage classifier): the stage 
        classifier returns 1 if the sum of the classifiers' responces is greater 
        than threshold and 0 otherwise */
        int  count;  /* number of classifiers in the battery */
        float threshold; /* threshold for the boosted classifier */
        CvHaarClassifier* classifier; /* array of classifiers */
        /* these fields are used for organizing trees of stage classifiers, 
        rather than just stright cascades */
        CvHaarClassifierCascade
        typedef struct CvHidHaarClassifierCascade CvHidHaarClassifierCascade;
        typedef struct CvHaarClassifierCascade
        {
            int  flags; 
            int  count; 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人久久精品77777最新版本| 欧美艳星brazzers| 一本一道久久a久久精品| 欧美日韩免费观看一区二区三区| 精品国产91洋老外米糕| 亚洲精品一二三四区| 国产乱人伦精品一区二区在线观看| 色八戒一区二区三区| 久久综合色综合88| 婷婷国产v国产偷v亚洲高清| av一本久道久久综合久久鬼色| 日韩一区二区影院| 亚洲第一福利视频在线| 91免费视频大全| 欧美激情一区二区三区四区 | 在线观看av一区| 久久精品日韩一区二区三区| 蜜桃av一区二区三区电影| 欧美网站一区二区| 亚洲色图欧美在线| 成人综合婷婷国产精品久久免费| 精品久久免费看| 精品中文字幕一区二区小辣椒| 欧美久久一二区| 亚洲123区在线观看| 色噜噜久久综合| 亚洲裸体xxx| 99久久国产综合精品麻豆| 国产日产亚洲精品系列| 国产乱一区二区| 国产亚洲精品aa| 国产91丝袜在线18| 国产欧美一区二区三区在线看蜜臀| 黑人巨大精品欧美一区| 久久婷婷国产综合精品青草| 国产最新精品免费| 国产欧美一区二区三区沐欲| 高清shemale亚洲人妖| 国产丝袜美腿一区二区三区| 国产很黄免费观看久久| 国产欧美在线观看一区| 粉嫩嫩av羞羞动漫久久久| 国产精品欧美一区喷水| www.久久精品| 一区二区高清在线| 欧美日韩一区三区四区| 日本欧美肥老太交大片| 精品久久久久久最新网址| 国产精品主播直播| 国产精品久久久久久久午夜片| youjizz国产精品| 亚洲国产综合在线| 7777精品伊人久久久大香线蕉超级流畅 | 久久久91精品国产一区二区精品 | 久久精品免视看| 国产成人精品1024| 亚洲欧美自拍偷拍色图| 欧美日韩一区国产| 久久精品国产秦先生| 国产视频911| 欧美中文字幕亚洲一区二区va在线 | 美女诱惑一区二区| 国产女人18毛片水真多成人如厕| 97精品国产露脸对白| 亚洲成人手机在线| 久久蜜桃香蕉精品一区二区三区| 99久久亚洲一区二区三区青草| 亚洲福利视频一区二区| 久久综合丝袜日本网| 色综合色综合色综合| 麻豆精品久久久| 1区2区3区国产精品| 欧美日韩国产一二三| 国产乱对白刺激视频不卡| 伊人一区二区三区| 精品国产一区二区三区不卡| 91在线免费视频观看| 久久99热99| 亚洲免费观看在线视频| 精品国产91九色蝌蚪| 一本一道综合狠狠老| 美女视频黄 久久| 亚洲免费电影在线| 久久综合视频网| 3atv在线一区二区三区| 91在线国产福利| 国产成人精品一区二区三区网站观看 | 69堂国产成人免费视频| 91在线视频观看| 国产成人精品在线看| 裸体歌舞表演一区二区| 亚洲欧美国产三级| 久久久久久久久久久久电影| 欧美日韩精品欧美日韩精品一 | 久久精品亚洲国产奇米99| 在线成人午夜影院| 色综合色综合色综合色综合色综合 | 亚洲bt欧美bt精品| 综合在线观看色| 久久久久久久综合色一本| 欧美电影免费观看高清完整版在线 | 日本午夜一本久久久综合| 亚洲美女偷拍久久| 国产精品国产自产拍在线| 久久久99久久| 欧美精品一区二区三区蜜桃| 欧美一区二区免费观在线| 欧美亚洲日本国产| 色综合天天综合给合国产| 成人av资源在线观看| 国产精品一区专区| 国模冰冰炮一区二区| 久久99国产精品久久99| 日本欧美在线看| 蜜臀99久久精品久久久久久软件| 日韩精品国产欧美| 午夜视频一区在线观看| 午夜欧美电影在线观看| 午夜婷婷国产麻豆精品| 日韩精品电影在线观看| 另类小说视频一区二区| 久久精品二区亚洲w码| 日韩电影在线免费观看| 日韩激情中文字幕| 日本午夜精品一区二区三区电影| 日韩成人一级片| 精品综合久久久久久8888| 国产揄拍国内精品对白| 国产成人免费av在线| 97成人超碰视| 精品视频在线免费看| 91精品国产手机| 欧美精品一区二区三区四区 | 亚洲美女免费视频| 亚洲自拍欧美精品| 天涯成人国产亚洲精品一区av| 日本中文字幕不卡| 国产一区二区三区免费看| 丰满放荡岳乱妇91ww| 色综合天天天天做夜夜夜夜做| 欧美日韩五月天| 精品美女一区二区三区| 中文字幕精品综合| 亚洲综合免费观看高清在线观看| 五月激情综合网| 国产一区二区三区精品视频| 99精品国产热久久91蜜凸| 欧美理论片在线| 国产亚洲一区二区三区四区| 最新欧美精品一区二区三区| 亚洲国产成人91porn| 国产一区二区按摩在线观看| 91麻豆国产在线观看| 日韩欧美国产麻豆| 日韩理论在线观看| 另类小说视频一区二区| 色综合咪咪久久| 2024国产精品| 亚洲一区二区av电影| 国产成人精品影视| 在线91免费看| 亚洲欧洲无码一区二区三区| 麻豆精品蜜桃视频网站| 在线亚洲+欧美+日本专区| 久久亚洲一级片| 图片区小说区区亚洲影院| 国产91精品一区二区麻豆亚洲| 欧美男人的天堂一二区| 综合久久久久久| 国产精品白丝jk黑袜喷水| 欧美精品一级二级三级| 亚洲丝袜另类动漫二区| 激情综合网天天干| 欧美老女人第四色| 亚洲免费电影在线| 成人精品一区二区三区中文字幕| 欧美精品久久天天躁| 樱桃国产成人精品视频| 国产激情视频一区二区三区欧美| 91精品国产色综合久久不卡电影| 亚洲免费资源在线播放| 国产91精品入口| 2014亚洲片线观看视频免费| 日本三级亚洲精品| 欧美日韩亚洲国产综合| 亚洲精品国产一区二区精华液| 国产尤物一区二区在线| 日韩久久免费av| 日韩av电影免费观看高清完整版| 欧美怡红院视频| 一区二区三区精品视频| 99免费精品在线观看| 中文字幕一区二区日韩精品绯色| 国产一区二区在线观看免费| 欧美白人最猛性xxxxx69交| 日本不卡一二三| 日韩三级在线观看| 日本不卡在线视频| 欧美一区二区视频在线观看2020| 午夜精品福利一区二区三区av|