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

  • 相关阅读:
    Java对象转型
    .Net之路(十二)Cookie对象
    java学习笔记-包
    MongoDB的安装和简单使用
    考试系统维护中对项目管理的一点体会
    .Net之路(十一)StringBuilder和string
    考试系统调试优化总结
    我的2013——走过就有收获
    针对:Arraylist集合无法修改,下一次枚举无法操作的解决方案
    函数第二部分:为什么说动态参数是没有计划好的参数-Python基础前传(11)
  • 原文地址:https://www.cnblogs.com/aicro/p/1950395.html
Copyright © 2011-2022 走看看