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

  • 相关阅读:
    AlphaMobileControls
    .NET Compact Framework下注册表导出工具的开发
    windows moblie 5.0在托管程序中实现短信接收和拦截
    自定义MessageBox
    Windows Mobile 背景灯控制
    windows Mobile 启动Mobile Office
    windows mobile 5.0 进程管理、窗体管理、重启和关闭操作系统
    让Windows Mobile模拟器通过你的PC上网
    Windows Mobile获取存储卡容量及使用情况
    透明背景
  • 原文地址:https://www.cnblogs.com/aicro/p/1950395.html
Copyright © 2011-2022 走看看