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

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

?? subdivmorpher.h

?? 微軟的基于HMM的人臉識別原代碼, 非常經典的說
?? H
字號:
#pragma once

#include "CV.hpp"
#include <assert.h>
#include <string.h>


inline CvSize GetImageSize( IplImage* img )
{
    CvSize size = { 0, 0 };
    if( img ) cvGetImageRawData( img, 0, 0, &size );
    return size;
}


inline IplImage* CreateIsometricImage( IplImage* src, IplImage* dst,
                                       int desired_depth, int desired_num_channels )
{
    CvSize src_size = GetImageSize( src ),
           dst_size = src_size;

    if( dst ) dst_size = GetImageSize( dst );

    if( !dst || dst->depth != desired_depth ||
        dst->nChannels != desired_num_channels ||
        dst_size.width != src_size.width ||
        dst_size.height != dst_size.height )
    {
        cvReleaseImage( &dst );
        dst = cvCreateImage( src_size, desired_depth, desired_num_channels );
    }

    return dst;
}

// Basic class for ViewMorphing
class CCvMorpher
{
protected:

    IplImage* m_left_img;
    IplImage* m_right_img;
    IplImage* m_virtual_img;
    IplImage* m_disparity_img;

    float     m_pan;
    bool      m_isVirtualImageReady;
    bool      m_isStereoReady;
    bool      m_isDisparityReady;

    void  Clear()
    {
        m_left_img = m_right_img = m_virtual_img = m_disparity_img = 0;
        m_pan = 0.5f;
        m_isVirtualImageReady = m_isStereoReady =
            m_isDisparityReady = false;
    }

    virtual void  ResetStereo()
    {
        m_isVirtualImageReady = m_isStereoReady =
            m_isDisparityReady = false;
    }

    virtual void  Release()
    {
        cvReleaseImage( &m_left_img );
        cvReleaseImage( &m_right_img );
        cvReleaseImage( &m_virtual_img );
        cvReleaseImage( &m_disparity_img );
        Clear();
    }

    virtual bool  OnCalculateStereo()
    {
        return false;
    }

    virtual bool  OnCalculateVirtualImage()
    {
        return false;
    }

    virtual bool  CalculateStereo()
    {
        CvSize left_size = GetImageSize(m_left_img),
               right_size = GetImageSize(m_right_img);
        
        if( !m_left_img || !m_right_img ||
            m_left_img->depth != m_right_img->depth ||
            m_left_img->depth != IPL_DEPTH_8U ||
            m_left_img->nChannels != m_right_img->nChannels ||
            m_left_img->nChannels != 3 ||
            left_size.width != right_size.width ||
            left_size.height != right_size.height ) return false;

        return OnCalculateStereo();
    }

    virtual bool  CalculateVirtualImage()
    {
        m_virtual_img = CreateIsometricImage( m_left_img,
                                              m_virtual_img,
                                              m_left_img -> depth,
                                              m_left_img -> nChannels
                                            );
        return OnCalculateVirtualImage();
    }

    virtual bool OnCalculateDisparity()
    {
        return false;
    }

    virtual bool CalculateDisparity()
    {
        if( !m_isStereoReady )
        {
            m_isStereoReady = CalculateStereo();
        }
        m_isDisparityReady = m_isStereoReady && OnCalculateDisparity();

        return m_isDisparityReady;
    }

    virtual bool OnCalculateDisparityImage()
    {
        return false;
    }
    
    virtual bool CalculateDisparityImage()
    {
        m_disparity_img = CreateIsometricImage( m_left_img,
                                                m_disparity_img,
                                                m_left_img -> depth,
                                                m_left_img -> nChannels
                                              );
        if( !m_isDisparityReady ) {
            m_isDisparityReady = CalculateDisparity();
        }
        OnCalculateDisparityImage();

        return true;
    }

    virtual void  SetImage( IplImage* src, IplImage*& dst,
                            bool substitute_pointer = false )
    {
        if( dst != src )
        {
            if( substitute_pointer )
            {
                cvReleaseImage( &dst );
                dst = src;
            }
            else
            {
                dst = CreateIsometricImage( src, dst, src->depth, src->nChannels );
                iplCopy( src, dst );
            }
        }
        ResetStereo();
    }

public:

    CCvMorpher()
    {
        Clear();
    }

    virtual ~CCvMorpher()
    {
        Release();
    }

    virtual void SetLeftImage( IplImage* img, bool substitute_pointer = false )
    {
        SetImage( img, m_left_img, substitute_pointer );
    }

    virtual void SetRightImage( IplImage* img, bool substitute_pointer = false )
    {
        SetImage( img, m_right_img, substitute_pointer );
    }

    virtual IplImage* GetLeftImage() { return m_left_img; }
    virtual IplImage* GetRightImage() { return m_right_img; }

    virtual IplImage* GetVirtualImage()
    {
        if( !m_isVirtualImageReady )
        {
            if( !m_isStereoReady )
            {
                m_isStereoReady = CalculateStereo();
            }
            m_isVirtualImageReady = m_isStereoReady && CalculateVirtualImage();
        }
        return m_virtual_img;
    }

    virtual IplImage* GetDisparityImage()
    {
        if( !m_isStereoReady ) {
            m_isStereoReady = CalculateStereo();
        }
        CalculateDisparityImage();

        return m_disparity_img;
    }

    virtual void SetPan( float pan )
    {
        assert( 0.f <= pan && pan <= 1.f );
        m_pan = pan;
        
        m_isVirtualImageReady = false;
    }

    float GetPan() { return m_pan; };
};


// Subdivision + LK - based viewmorphing
class CCvSubdivMorpher : public CCvMorpher
{
protected:

    int  m_count;
    int  m_realcount;
    int  m_maxcount;
    CvSubdiv2D* m_subdiv;
    CvPoint2D32f* m_left_points;
    CvPoint2D32f* m_right_points;
    IplImage* m_left_gray_img;
    IplImage* m_right_gray_img;
    IplImage* m_left_pyr;
    IplImage* m_right_pyr;
    CvSize m_win_size;
    int  m_pyr_level;
    CvTermCriteria m_criteria;

    void ClearPoints()
    {
        m_left_points = m_right_points = 0;
        m_count = m_maxcount = 0;
    }

    virtual void ReleasePoints()
    {
        cvClearGraph( (CvGraph*)m_subdiv );
        delete m_left_points;
        delete m_right_points;
        ClearPoints();
    }

    void Clear()
    {
        CCvMorpher::Clear();
        ClearPoints();
        m_left_gray_img = m_right_gray_img = 0;
        m_left_pyr = m_right_pyr = 0;
        m_realcount = 0;
    }

    virtual void Release()
    {
        CCvMorpher::Release();
        ReleasePoints();
        cvReleaseImage( &m_left_gray_img );
        cvReleaseImage( &m_right_gray_img );
        cvReleaseImage( &m_left_pyr );
        cvReleaseImage( &m_right_pyr );
        Clear();
    }

    virtual bool  OnCalculateStereo();
    virtual bool  OnCalculateVirtualImage();
    virtual bool  GeneratePoints();
    virtual void  MorphFacet( CvSubdiv2DEdge edge );

public:

    CCvSubdivMorpher();

    int GetPointCount() { return m_count; }
    void SetPointCount( int count )
    {
        if( count > m_maxcount )
        {
            ReleasePoints();
            m_left_points = new CvPoint2D32f[count];
            m_right_points = new CvPoint2D32f[count];
            m_maxcount = count;
        }
        m_count = count;
        ResetStereo();
    }
};

// Pixel to pixel morphing
class CCvPixelToPixelMorpher : public CCvMorpher
{
protected:
    int     m_maxPixelDifference;
    int*    m_corr;
    int*    m_corrNum;

protected:
    struct _Color
    {
        unsigned char red;
        unsigned char green;
        unsigned char blue;
    };
    
    typedef enum {
        CORR_ARRAY      = 0,
        NUM_CORR_ARRAY  = 1,
        CORR_EDGES      = 2,
        CORR_TEMP       = 3
    } corrArrayType;
    
    typedef enum {
        morphNormalImage    = 0,
        morphDepthMap       = 1
    } morphImageType;

protected:
    int* corrAlloc( int width, int height, corrArrayType type, int maxPixelDifference = 0 );
    void FindFullCorr( unsigned char* _leftImage,
                       int _leftLineStep,
                       unsigned char* _rightImage,
                       int _rightLineStep,
                       int* _corrArray,
                       int* _numCorrArray,
                       int width,
                       int height,
                       int maxPixelDifference
                     );
    void FindCorr( unsigned char* _leftLine,
                   unsigned char* _rightLine,
                   int* _corrArray,
                   int* numCorrArray,
                   int width,
                   int* edges,
                   int* tempArray
                 );
    
    void Morph( unsigned char* _leftImage,
                int _leftLineStep,
                unsigned char* _rightImage,
                int _rightLineStep,
                unsigned char* _resultImage,
                int _resultLineStep,
                int* _corrArray,
                int* _numCorrArray,
                int width,
                int height,
                float alpha,
                morphImageType imageNeed    = morphNormalImage,
                int maxDifference           = 0
              );
    
    int distance( unsigned char* _leftLine,
                  unsigned char* _rightLine,
                  int lineSize,
                  int x,
                  int y
                );

    void Clear()
    {
        CCvMorpher::Clear();
        m_maxPixelDifference = 10;
        m_corr = m_corrNum = 0;
    }

    virtual void Release()
    {
        CCvMorpher::Release();
        if( m_corr ) {
            free( m_corr );
        }
        if( m_corrNum ) {
            free( m_corrNum );
        }
        Clear();
    }

    virtual bool  OnCalculateStereo();
    virtual bool  OnCalculateVirtualImage();
    virtual bool  OnCalculateDisparity();
    virtual bool  OnCalculateDisparityImage();

public:

    CCvPixelToPixelMorpher();
};

/* End of file. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美国av一区二区| 色综合久久66| 日本伦理一区二区| 精品久久一区二区| 亚洲成人在线观看视频| 成人一级片在线观看| 91麻豆精品国产综合久久久久久| 中文字幕乱码亚洲精品一区| 美国三级日本三级久久99| 色94色欧美sute亚洲线路一ni| 精品国产91亚洲一区二区三区婷婷| 亚洲黄色av一区| 丰满少妇在线播放bd日韩电影| 日韩美一区二区三区| 亚洲成人综合网站| 欧美私人免费视频| 亚洲女同一区二区| 99久久精品免费看| 国产精品情趣视频| 国产黑丝在线一区二区三区| 精品乱人伦一区二区三区| 婷婷综合另类小说色区| 色偷偷成人一区二区三区91| 成人免费在线视频观看| 国产91精品露脸国语对白| 精品国产a毛片| 国产一区在线看| 精品国内片67194| 国产一区二区三区在线观看精品 | 欧美系列亚洲系列| 亚洲精品日产精品乱码不卡| 不卡的av电影| 1区2区3区精品视频| 一本大道综合伊人精品热热| 亚洲一区在线看| 欧美高清视频www夜色资源网| 五月天激情综合网| 欧美一级片免费看| 国产一区二区影院| 国产精品家庭影院| 色综合天天做天天爱| 亚洲午夜国产一区99re久久| 欧美日韩国产123区| 捆绑紧缚一区二区三区视频| 精品免费一区二区三区| 粉嫩嫩av羞羞动漫久久久| 亚洲青青青在线视频| 欧美放荡的少妇| 久久99热这里只有精品| 中文子幕无线码一区tr| 日本电影亚洲天堂一区| 日一区二区三区| 久久精品在这里| 在线影院国内精品| 久久精品国产精品青草| 欧美韩日一区二区三区四区| 91小宝寻花一区二区三区| 午夜精品福利一区二区三区蜜桃| 日韩一区二区三区四区五区六区| 国产高清视频一区| 亚洲国产精品一区二区久久恐怖片| 6080日韩午夜伦伦午夜伦| 国产高清在线精品| 亚洲成av人影院| 国产亚洲综合色| 欧美日韩国产小视频在线观看| 黄色日韩三级电影| 亚洲黄色片在线观看| 精品国产伦一区二区三区免费 | 欧美精品日韩一本| 国产精品一卡二| 视频一区二区三区中文字幕| 国产亚洲欧洲997久久综合| 在线观看www91| 国产精品亚洲午夜一区二区三区 | 亚洲视频电影在线| 日韩欧美亚洲一区二区| 91福利精品第一导航| 美国精品在线观看| 亚洲午夜免费电影| 中文字幕欧美国产| 欧美成人三级电影在线| 欧美日韩一区二区三区高清 | 欧美色涩在线第一页| 国产河南妇女毛片精品久久久| 五月天亚洲婷婷| 亚洲精品视频在线看| 国产亚洲精品久| 精品日本一线二线三线不卡| 在线精品国精品国产尤物884a| 国产很黄免费观看久久| 裸体健美xxxx欧美裸体表演| 亚洲色图.com| 久久精品水蜜桃av综合天堂| 91精品国产免费| 欧美日韩在线综合| 在线免费观看日本一区| 成人h动漫精品一区二| 国产精品1区2区3区| 久久9热精品视频| 卡一卡二国产精品| 久久aⅴ国产欧美74aaa| 免费一区二区视频| 蜜臀av一级做a爰片久久| 五月综合激情网| 日韩精品三区四区| 日本不卡视频一二三区| 日本中文字幕一区二区视频 | 91.麻豆视频| 欧美性猛交xxxx黑人交| 欧美午夜影院一区| 欧美亚洲高清一区二区三区不卡| 91影院在线观看| 色呦呦日韩精品| 欧美日韩一区三区四区| 欧美精品在线观看一区二区| 欧美人伦禁忌dvd放荡欲情| 欧美日韩一卡二卡三卡| 在线播放/欧美激情| 欧美精品18+| 日韩一区二区电影网| 日韩欧美一区中文| 精品处破学生在线二十三| 2021久久国产精品不只是精品| 26uuu国产一区二区三区| 久久网站热最新地址| 国产欧美一区二区精品婷婷| 国产精品久久毛片av大全日韩| 18涩涩午夜精品.www| 亚洲第四色夜色| 另类调教123区| 国产精品77777| 一本大道久久a久久精二百| 欧美日韩高清在线| 2023国产精品| 亚洲美女精品一区| 日本色综合中文字幕| 精品一区二区三区蜜桃| 播五月开心婷婷综合| 欧美网站大全在线观看| 日韩免费看的电影| 国产精品美女久久福利网站| 性感美女久久精品| 国产一区免费电影| 欧美在线免费观看亚洲| 日韩欧美一区二区不卡| 国产精品成人一区二区三区夜夜夜| 一区二区三区在线观看国产| 美日韩一区二区三区| caoporn国产一区二区| 欧美日本一区二区在线观看| 久久蜜臀精品av| 午夜精品在线视频一区| 不卡视频一二三| 日韩欧美国产麻豆| 亚洲欧洲日韩一区二区三区| 日韩av中文字幕一区二区| 成人精品一区二区三区中文字幕| 欧美日本一道本| 中文字幕一区二区三区在线观看| 日韩精品乱码免费| 色呦呦日韩精品| 国产色一区二区| 蜜桃久久久久久| 欧美怡红院视频| 中文字幕一区二区在线观看| 久久99国产精品久久99| 色菇凉天天综合网| 国产精品嫩草99a| 激情五月播播久久久精品| 精品视频123区在线观看| 18涩涩午夜精品.www| 国产福利一区二区三区视频 | 亚洲天堂精品视频| 久久精品国产99国产精品| 欧美性xxxxxxxx| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 久久久亚洲精品石原莉奈| 爽好久久久欧美精品| 欧美性一二三区| 亚洲一卡二卡三卡四卡无卡久久| www.在线欧美| 日本一区二区视频在线观看| 另类调教123区| 91精品国产aⅴ一区二区| 亚洲一区二区av在线| 色婷婷久久一区二区三区麻豆| 国产夜色精品一区二区av| 国产在线麻豆精品观看| 日韩欧美国产电影| 免费黄网站欧美| 6080午夜不卡| 蜜桃精品视频在线| 日韩欧美亚洲另类制服综合在线| 婷婷六月综合亚洲| 正在播放一区二区| 蜜臀av一区二区在线观看| 日韩精品一区在线观看| 免费高清在线视频一区·| 欧美一级日韩不卡播放免费|