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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? cvcontours.cpp

?? 將OpenCV移植到DSP上
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
      cvEndFindContours( &scanner, &first_contour );      ...      -----------------------------------------------------------------      Second variant is more complex and can be used when someone wants store not      the retrieved contours but transformed ones. (e.g. approximated with some      non-default algorithm ).            The scheme can be the as following:      icvContourScanner scanner;      CvMemStorage*  contour_storage;      CvMemStorage*  temp_storage;      CvSeq*  first_contour;      CvStatus  result;      ...      icvCreateMemStorage( &contour_storage, block_size/0 );      icvCreateMemStorage( &temp_storage, block_size/0 );      ...                    icvStartFindContours8uC1R              ( <img_params>, temp_storage,                header_size, approx_method,                [retrival_mode],                &scanner );      for(;;)      {          CvSeq* temp_contour;          CvSeq* new_contour;          result = icvFindNextContour( scanner, &temp_contour );          if( result != CV_OK ) break;          <approximation_function>( temp_contour, contour_storage,                                    &new_contour, <parameters...> );          icvSubstituteContour( scanner, new_contour );          ...      }      if( result < 0 ) goto error_processing;      cvEndFindContours( &scanner, &first_contour );      ...      ----------------------------------------------------------------------------      Third method to retrieve contours may be applied if contours are irrelevant      themselves but some characteristics of them are used only.      The usage is similar to second except slightly different internal loop      for(;;)      {          CvSeq* temp_contour;          result = icvFindNextContour( &scanner, &temp_contour );          if( result != CV_OK ) break;          // calculate some characteristics of temp_contour          icvSubstituteContour( scanner, 0 );          ...      }      new_storage variable is not needed here.       Two notes.      1. Second and third method can interleave. I.e. it is possible to         remain contours that satisfy with some criteria and reject others.         In hierarchic case the resulting tree is the part of original tree with         some nodes absent. But in the resulting tree the contour1 is a child          (may be indirect) of contour2 iff in the original tree the contour1         is a child (may be indirect) of contour2.*/static voidicvEndProcessContour( CvContourScanner scanner ){    _CvContourInfo *l_cinfo = scanner->l_cinfo;    if( l_cinfo )    {        if( scanner->subst_flag )        {            CvMemStoragePos temp;            cvSaveMemStoragePos( scanner->storage2, &temp );            if( temp.top == scanner->backup_pos2.top &&                temp.free_space == scanner->backup_pos2.free_space )            {                cvRestoreMemStoragePos( scanner->storage2, &scanner->backup_pos );            }            scanner->subst_flag = 0;        }        if( l_cinfo->contour )        {            cvInsertNodeIntoTree( l_cinfo->contour, l_cinfo->parent->contour,                                  &(scanner->frame) );        }        scanner->l_cinfo = 0;    }}/* replaces one contour with another */CV_IMPL voidcvSubstituteContour( CvContourScanner scanner, CvSeq * new_contour ){    _CvContourInfo *l_cinfo;    CV_FUNCNAME( "cvSubstituteContour" );    __BEGIN__;    if( !scanner )        CV_ERROR( CV_StsNullPtr, "" );    l_cinfo = scanner->l_cinfo;    if( l_cinfo && l_cinfo->contour && l_cinfo->contour != new_contour )    {        l_cinfo->contour = new_contour;        scanner->subst_flag = 1;    }    __END__;}/*     marks domain border with +/-<constant> and stores the contour into CvSeq.        method:            <0  - chain            ==0 - direct            >0  - simple approximation*/static CvStatusicvFetchContour( char                   *ptr,                  int                    step,                 CvPoint                pt,                  CvSeq*                 contour,                  int    _method ){    const char      nbd = 2;    int             deltas[16];    CvSeqWriter     writer;    char            *i0 = ptr, *i1, *i3, *i4 = 0;    int             prev_s = -1, s, s_end;    int             method = _method - 1;    assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE );    /* initialize local state */    CV_INIT_3X3_DELTAS( deltas, step, 1 );    memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] ));    /* initialize writer */    cvStartAppendToSeq( contour, &writer );    if( method < 0 )        ((CvChain *) contour)->origin = pt;    s_end = s = CV_IS_SEQ_HOLE( contour ) ? 0 : 4;    do    {        s = (s - 1) & 7;        i1 = i0 + deltas[s];        if( *i1 != 0 )            break;    }    while( s != s_end );    if( s == s_end )            /* single pixel domain */    {        *i0 = (char) (nbd | -128);        if( method >= 0 )        {            CV_WRITE_SEQ_ELEM( pt, writer );        }    }    else    {        i3 = i0;        prev_s = s ^ 4;        /* follow border */        for( ;; )        {            s_end = s;            for( ;; )            {                i4 = i3 + deltas[++s];                if( *i4 != 0 )                    break;            }            s &= 7;            /* check "right" bound */            if( (unsigned) (s - 1) < (unsigned) s_end )            {                *i3 = (char) (nbd | -128);            }            else if( *i3 == 1 )            {                *i3 = nbd;            }            if( method < 0 )            {                char _s = (char) s;                CV_WRITE_SEQ_ELEM( _s, writer );            }            else            {                if( s != prev_s || method == 0 )                {                    CV_WRITE_SEQ_ELEM( pt, writer );                    prev_s = s;                }                pt.x += icvCodeDeltas[s].x;                pt.y += icvCodeDeltas[s].y;            }            if( i4 == i0 && i3 == i1 )                break;            i3 = i4;            s = (s + 4) & 7;        }                       /* end of border following loop */    }    cvEndWriteSeq( &writer );    if( _method != CV_CHAIN_CODE )        cvBoundingRect( contour, 1 );    assert( writer.seq->total == 0 && writer.seq->first == 0 ||            writer.seq->total > writer.seq->first->count ||            (writer.seq->first->prev == writer.seq->first &&             writer.seq->first->next == writer.seq->first) );    return CV_OK;}/*    trace contour until certain point is met.   returns 1 if met, 0 else.*/static inticvTraceContour( char *ptr, int step, char *stop_ptr, int is_hole ){    int deltas[16];    char *i0 = ptr, *i1, *i3, *i4;    int s, s_end;    /* initialize local state */    CV_INIT_3X3_DELTAS( deltas, step, 1 );    memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] ));    assert( (*i0 & -2) != 0 );    s_end = s = is_hole ? 0 : 4;    do    {        s = (s - 1) & 7;        i1 = i0 + deltas[s];        if( *i1 != 0 )            break;    }    while( s != s_end );    i3 = i0;    /* check single pixel domain */    if( s != s_end )    {        /* follow border */        for( ;; )        {            s_end = s;            for( ;; )            {                i4 = i3 + deltas[++s];                if( *i4 != 0 )                    break;            }            if( i3 == stop_ptr || (i4 == i0 && i3 == i1) )                break;            i3 = i4;            s = (s + 4) & 7;        }                       /* end of border following loop */    }    return i3 == stop_ptr;}static CvStatusicvFetchContourEx( char*                ptr,                    int                  step,                   CvPoint              pt,                    CvSeq*               contour,                   int  _method,                    int                  nbd,                   CvRect*              _rect ){    int         deltas[16];    CvSeqWriter writer;    char        *i0 = ptr, *i1, *i3, *i4;    CvRect      rect;    int         prev_s = -1, s, s_end;    int         method = _method - 1;    assert( (unsigned) _method <= CV_CHAIN_APPROX_SIMPLE );    assert( 1 < nbd && nbd < 128 );    /* initialize local state */    CV_INIT_3X3_DELTAS( deltas, step, 1 );    memcpy( deltas + 8, deltas, 8 * sizeof( deltas[0] ));    /* initialize writer */    cvStartAppendToSeq( contour, &writer );    if( method < 0 )        ((CvChain *)contour)->origin = pt;    rect.x = rect.width = pt.x;    rect.y = rect.height = pt.y;    s_end = s = CV_IS_SEQ_HOLE( contour ) ? 0 : 4;    do    {        s = (s - 1) & 7;        i1 = i0 + deltas[s];        if( *i1 != 0 )            break;    }    while( s != s_end );    if( s == s_end )            /* single pixel domain */    {        *i0 = (char) (nbd | 0x80);        if( method >= 0 )        {            CV_WRITE_SEQ_ELEM( pt, writer );        }    }    else    {        i3 = i0;        prev_s = s ^ 4;        /* follow border */        for( ;; )        {            s_end = s;            for( ;; )            {                i4 = i3 + deltas[++s];                if( *i4 != 0 )                    break;            }            s &= 7;            /* check "right" bound */            if( (unsigned) (s - 1) < (unsigned) s_end )            {                *i3 = (char) (nbd | 0x80);            }            else if( *i3 == 1 )            {                *i3 = (char) nbd;            }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人教育av在线| 一区二区日韩av| 麻豆国产精品视频| 日韩视频在线观看一区二区| 蜜桃传媒麻豆第一区在线观看| 91精品国产一区二区三区蜜臀| 美女看a上一区| 久久久亚洲精品一区二区三区| 国产二区国产一区在线观看| 国产精品久久久久四虎| 色噜噜狠狠色综合欧洲selulu| 亚洲国产精品久久人人爱蜜臀 | 欧美精品视频www在线观看| 三级成人在线视频| 精品国产乱码久久久久久图片| 国产乱子轮精品视频| 亚洲欧洲日产国产综合网| 欧美又粗又大又爽| 久久成人免费网| 中文字幕日本不卡| 欧美精品一级二级三级| 国产一区二区免费在线| 亚洲欧美偷拍卡通变态| 91精品免费在线观看| 国产麻豆午夜三级精品| 亚洲一区二区成人在线观看| 精品国产123| 色婷婷av一区二区三区大白胸| 日韩成人免费电影| 国产精品久久久久影院| 欧美一区永久视频免费观看| 成人综合婷婷国产精品久久蜜臀| 日韩国产欧美三级| 国产精品无人区| 日韩一级欧美一级| 色伊人久久综合中文字幕| 美国毛片一区二区三区| 亚洲黄色片在线观看| 久久综合成人精品亚洲另类欧美| 日本高清免费不卡视频| 国产乱国产乱300精品| 一区二区三区国产精品| 亚洲精品在线电影| 欧美在线啊v一区| 国产91丝袜在线观看| 午夜av区久久| 国产精品久久久久久久久果冻传媒| 欧美日本乱大交xxxxx| 国产成人精品免费视频网站| 日韩专区在线视频| 一区二区三区四区在线| 亚洲国产精华液网站w| 精品国产污污免费网站入口| 欧美日韩和欧美的一区二区| 97se亚洲国产综合在线| 国产精品一二三四| 蜜臀精品一区二区三区在线观看| 亚洲三级在线免费观看| 国产清纯白嫩初高生在线观看91| 日韩一区二区免费视频| 欧美精品成人一区二区三区四区| 99久久婷婷国产综合精品电影| 久久精品久久久精品美女| 亚洲电影一区二区| 亚洲欧美色图小说| 亚洲天天做日日做天天谢日日欢| 国产日韩精品一区二区三区 | 日韩欧美不卡在线观看视频| 欧美日韩成人在线| 欧美私模裸体表演在线观看| 在线视频国内一区二区| 色天使色偷偷av一区二区| 92精品国产成人观看免费| 成人网男人的天堂| 成人18精品视频| 成年人午夜久久久| 99在线精品视频| 91视频com| 日本精品视频一区二区| 色婷婷国产精品| 在线观看av一区二区| 色噜噜狠狠一区二区三区果冻| 色综合久久中文字幕| 色婷婷av一区二区三区大白胸| 97久久人人超碰| 色老汉av一区二区三区| 日本高清视频一区二区| 欧美日韩在线三区| 欧美电影影音先锋| 日韩精品在线看片z| www成人在线观看| 国产精品热久久久久夜色精品三区 | 日韩视频一区二区三区在线播放| 91麻豆精品国产无毒不卡在线观看 | 欧美激情一区二区| 亚洲三级久久久| 亚洲一区二区高清| 免费在线观看日韩欧美| 久久99精品视频| 国产成人免费视频一区| 91女厕偷拍女厕偷拍高清| 欧美日免费三级在线| 日韩欧美国产三级| 久久影音资源网| 国产精品短视频| 丝袜亚洲精品中文字幕一区| 美国十次综合导航| 成人亚洲一区二区一| 色婷婷久久久久swag精品| 欧美一区二区三区四区五区| 国产亚洲短视频| 亚洲一级二级三级在线免费观看| 日本不卡在线视频| 成人av午夜影院| 欧美日韩不卡一区二区| 久久久www免费人成精品| 中文字幕中文字幕一区二区| 亚洲五码中文字幕| 国产麻豆91精品| 欧美三级电影精品| 欧美极品另类videosde| 午夜影院久久久| 成人18视频日本| 日韩一区二区三区电影在线观看 | 99精品视频在线免费观看| 欧美性猛交xxxxxxxx| 久久香蕉国产线看观看99| 亚洲国产日韩av| 成年人午夜久久久| 日韩手机在线导航| 夜色激情一区二区| 国产a级毛片一区| 日韩亚洲欧美一区二区三区| 亚洲婷婷综合色高清在线| 国内成+人亚洲+欧美+综合在线| 色噜噜狠狠成人中文综合| 国产欧美日韩在线视频| 美女一区二区在线观看| 欧美综合色免费| 综合自拍亚洲综合图不卡区| 国产精品自拍一区| 日韩午夜av一区| 午夜在线成人av| 色婷婷久久久综合中文字幕| 欧美国产激情一区二区三区蜜月| 日本成人在线电影网| 欧日韩精品视频| 亚洲欧美aⅴ...| 成人av资源下载| 日本一二三四高清不卡| 精品无人码麻豆乱码1区2区| 欧美日韩一级黄| 亚洲一区免费视频| 91片黄在线观看| 成人免费一区二区三区在线观看| 国产一区欧美日韩| xfplay精品久久| 国产一区二区三区免费| 日韩女优av电影| 青青草精品视频| 日韩欧美一二三区| 蜜臀av一区二区在线免费观看| 欧美日韩国产成人在线91| 一个色综合网站| 欧美在线free| 亚洲成人动漫av| 欧美三级电影一区| 午夜国产不卡在线观看视频| 欧美日本在线视频| 午夜国产精品影院在线观看| 欧美日韩国产乱码电影| 成人国产精品免费观看动漫 | 久久久久99精品一区| 国产一区二区女| 亚洲国产成人午夜在线一区| 国产v日产∨综合v精品视频| 久久精品夜色噜噜亚洲a∨| 国产在线观看免费一区| 精品国产青草久久久久福利| 国产精品一区二区在线观看不卡| 久久综合给合久久狠狠狠97色69| 国产在线精品不卡| 国产精品网友自拍| 日本精品视频一区二区| 天天av天天翘天天综合网 | 欧美成人精品福利| 精品亚洲成av人在线观看| 久久久噜噜噜久噜久久综合| 国产一区二区伦理| 国产精品高清亚洲| 欧美日韩一本到| 精品一区二区三区免费观看| 欧美国产日韩一二三区| 一本大道久久a久久综合| 亚洲成a人v欧美综合天堂| 日韩精品专区在线| 国产91露脸合集magnet| 亚洲中国最大av网站| 精品日韩一区二区三区免费视频| 风间由美一区二区三区在线观看|