zoukankan      html  css  js  c++  java
  • artoolkit video 数据转换到 IplImage*

    代码

    //************************************
    // Method:    Fill_CV_IplImage
    // FullName:  Fill_CV_IplImage
    // Access:    public
    // Returns:   bool
    // Qualifier:
    // Parameter: int width
    // Parameter: int height
    // Parameter: char * imageData
    // Parameter: IplImage * pOutImg

    // Description:
    // pOutImg must be a IplImage* whose header has been created as 4 channels
    // and IPL_DEPTH_8U depth
    //************************************
    void Fill_CV_IplImage(int width, int height, char* imageData, IplImage* pOutImg)
    {
     // artoolkit video data to IplImage*
     // the key lies in the fact that arVideoGetImage returns buffer with order
     // RGBA, which is the 4-channel and IPL_DEPTH_8U-depth OpenCV buffer  
     IplImage *img = cvCreateImageHeader(cvSize(width, height), IPL_DEPTH_8U, 4);

     cvSetImageData(img, imageData, width * 4);

     cvCopy(img, pOutImg);

     cvReleaseImageHeader(&img);
    }

     如果需要再额外地将4通道图像转换到3通道的话,那么就需要使用以下的函数。

    代码
    //************************************
    // Method:    Fill_CV_IplImage
    // FullName:  Fill_CV_IplImage
    // Access:    public 
    // Returns:   bool
    // Qualifier:
    // Parameter: int width
    // Parameter: int height
    // Parameter: char * imageData
    // Parameter: IplImage * pOutImg

    // Description:
    // pOutImg must be a IplImage* whose header has been created as 3 channels
    // and IPL_DEPTH_8U depth
    //************************************
    void Fill_CV_IplImage(int width, int height, char* imageData, IplImage* pOutImg)
    {
        
    // artoolkit video data to IplImage*
        
    // the key lies in the fact that arVideoGetImage returns buffer with order
        
    // RGBA, which is the 4-channel and IPL_DEPTH_8U-depth OpenCV buffer        
        IplImage *img = cvCreateImageHeader(cvSize(width, height), IPL_DEPTH_8U, 4);

        cvSetImageData(img, imageData, width 
    * 4);
        
        
    // convert 4 channels to 3 channels
        IplImage *pRed = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
        IplImage 
    *pGreen = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
        IplImage 
    *pBlue = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);
        IplImage 
    *pAlpha = cvCreateImage(cvSize(width, height), IPL_DEPTH_8U, 1);

        cvSplit(img, pBlue, pGreen, pRed, pAlpha);

        cvMerge(pBlue, pGreen, pRed, NULL, pOutImg);
     
        cvReleaseImage(&pRed);
        cvReleaseImage(&pBlue);
        cvReleaseImage(&pGreen);
        cvReleaseImage(&pAlpha);
        cvReleaseImageHeader(&img);
    }

    推荐一篇博文,关于cvsplit和cvMerge写得很不错

    http://blog.sina.com.cn/s/blog_520a9c1d0100b8hr.html

  • 相关阅读:
    觅踪2
    构建之法阅读笔记08
    觅踪1
    暑期第四周学习周总结
    暑期第三周学习周总结
    暑期第二周学习周总结
    数据库程序设计第九天--整合总结
    数据库程序设计第八天--隔离人员权限
    数据库程序设计第七天--隔离地权限
    数据库程序设计第六天--管理员权限
  • 原文地址:https://www.cnblogs.com/aicro/p/1950395.html
Copyright © 2011-2022 走看看