http://www.2cto.com/kf/201208/145559.html

http://www.opencv.org.cn/forum.php?mod=viewthread&tid=645&extra=

第一个是很笨的办法:

yuv三个分量分别写在3个矩阵下,然后合并之后转换为rgb分量的图片格式就可以了;

代码如下:

[html] 
IplImage *image,*rgbimg,*yimg,*uimg,*vimg,*uuimg,*vvimg; 
     
    rgbimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3); 
    image = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3); 
     
    yimg = cvCreateImageHeader(cvSize(nWidth, nHeight),IPL_DEPTH_8U,1); 
    uimg = cvCreateImageHeader(cvSize(nWidth/2, nHeight/2),IPL_DEPTH_8U,1); 
    vimg = cvCreateImageHeader(cvSize(nWidth/2, nHeight/2),IPL_DEPTH_8U,1); 
     
    uuimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,1); 
    vvimg = cvCreateImage(cvSize(nWidth, nHeight),IPL_DEPTH_8U,1); 
     
    cvSetData(yimg,pBuf, nWidth); 
    cvSetData(uimg,pBuf+nWidth*nHeight, nWidth/2); 
    cvSetData(vimg,pBuf+long(nWidth*nHeight*1.25), nWidth/2); 
    cvResize(uimg,uuimg,CV_INTER_LINEAR); 
    cvResize(vimg,vvimg,CV_INTER_LINEAR); 
     
    cvMerge(yimg,uuimg,vvimg,NULL,image); 
    cvCvtColor(image,rgbimg,CV_YCrCb2BGR);

还有一个方法就比较负载
首先自己根据原理转换为rgb格式

然后利用cvSetData()函数写入数据生成IplImage格式的图片

首先定义转换的公式:

[html]
#define MR(Y,U,V) (Y + (1.403)*(V-128)) 
#define MG(Y,U,V) (Y - (0.344) * (U-128) - (0.714) * (V-128) )  
#define MB(Y,U,V) (Y + ((1.773) * (U-128)))

yuv转rgb的函数:
[html] 
void YUV420_C_RGB( char* pYUV, unsigned char* pRGB, int height, int width) 

    char* pY = pYUV; 
    char* pU = pYUV+height*width; 
    char* pV = pU+(height*width/4); 
 
 
    unsigned char* pBGR = NULL; 
    unsigned char R = 0; 
    unsigned char G = 0; 
    unsigned char B = 0; 
    char Y = 0; 
    char U = 0; 
    char V = 0; 
    double tmp = 0; 
    for ( int i = 0; i < height; ++i ) 
    { 
        for ( int j = 0; j < width; ++j ) 
        { 
            pBGR = pRGB+ i*width*3+j*3; 
 
            Y = *(pY+i*width+j); 
            U = *pU; 
            V = *pV; 
 
            //B 
            tmp = MB(Y, U, V); 
            //B = (tmp > 255) ? 255 : (char)tmp; 
            //B = (B<0) ? 0 : B; 
            B = (unsigned char)tmp; 
            //G 
            tmp = MG(Y, U, V); 
            //G = (tmp > 255) ? 255 : (char)tmp; 
           // G = (G<0) ? 0 : G; 
            G = (unsigned char)tmp; 
            //R 
            tmp = MR(Y, U, V); 
            //R = (tmp > 255) ? 255 : (char)tmp; 
            //R = (R<0) ? 0 : R; 
            R = (unsigned char)tmp; 
 
 
            *pBGR     = R;             
            *(pBGR+1) = G;         
            *(pBGR+2) = B; 
         
 
            if ( i%2 == 0 && j%2 == 0) 
            { 
                *pU++; 
                //*pV++; 
            } 
            else 
            { 
                if ( j%2 == 0 ) 
                { 
                    *pV++ ; 
                } 
            } 
        } 
     
    } 
}

最后是写入IplImage的代码:
[html] 
unsigned char* pRGB = NULL; 
 
pRGB = (unsigned char*)malloc(nSize*sizeof(unsigned char*)*2); 
     
YUV420_C_RGB(pBuf,pRGB,nWidth,nHeight); 
     
IplImage *image; www.2cto.com
image = cvCreateImageHeader(cvSize(nWidth, nHeight),IPL_DEPTH_8U,3); 
cvSetData(image,pRGB,nWidth*3); 
程序都运行过
编译环境为vs2008

作者:xuhongwei0411

yuv转opencv中的IplImage的更多相关文章

  1. Opencv 中透视变换函数对IplImage图像变换时出现的问题?

    最近一直在做视频稳像的项目,为了简化部分实现,使用了部分Opencv的函数,其中包括Opencv中对IplImage进行同时变换的函数cvWarpPerspective(src, dst,...) 发 ...

  2. 使用GDI+显示OpenCV中的图像IplImage

    OpenCV虽然自带了轻量级的界面库HighGUI,但是支持的图像化元素实在是太少了,一般只在前期算法测试时使用.实际产品还是使用MFC库.因此本文记录了如何在GDI+中显示OpenCV中的IplIm ...

  3. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  4. OpenCV中IplImage图像格式与BYTE图像数据的转换

    最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...

  5. openCV中IplImage的使用

    http://blog.csdn.net/welcome_xu/article/details/7650680 IplImage结构详细分析   IplImage 结构解读: typedef stru ...

  6. OpenCV中IplImage和Mat间的相互转换

    OpenCV中做图像处理经常用到IplImage和Mat间的相互转换. 首先,cv::Mat是opencv2.0中的数据类型:IplImage是opencv1.0中的类型,两种类型并不相同. 1. I ...

  7. OpenCV 中的三大数据类型:IplImage 类型

    前言 本文将介绍 OpenCV 中的图像结构 IplImage 并提供一些很实用的技巧. 更多的矩阵处理函数还请参阅相关资料. IplImage 的类型定义 typedef struct _IplIm ...

  8. OpenCV中IplImage/CvMat/Mat转化关系

    原文链接:http://www.cnblogs.com/summerRQ/articles/2406109.html 如对内容和版权有何疑问,请拜访原作者或者通知本人. opencv中常见的与图像操作 ...

  9. 图像金字塔及其在 OpenCV 中的应用范例(下)

    前言 本文将主要讲解如何使用 OpenCV 实现图像分割,这也是图像金字塔在 OpenCV 中的一个重要应用. 关于图像分割 在计算机视觉领域,图像分割(Segmentation)指的是将数字图像细分 ...

随机推荐

  1. 【Python + ATX基于uiautomator2】之编写unittest自动化测试脚本

    不说废话上代码: #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2018/08/31 09:43 # @Author : zc # @ ...

  2. Erlang 和 Elixir 互相调用 (转)

    lixr设计目标之一就是要确保兼容性,可以兼容Erlang和其生态系统.Elixir和Erlang 都是运行同样的虚拟机平台(Erlang Virtual Machine).不管是在Erlang使用E ...

  3. 搞IT的技术人员为什么会如此苦逼

    http://www.cnblogs.com/springmvc-hibernate/archive/2012/05/10/2493733.html ————————————————————————— ...

  4. OpenCV中Camshitf算法学习

    今天上午,结合OpenCV自带的camshitf例程,简单的对camshitf有了一个大致的认识和理解,现总结如下: 1:关于HSV H指hue(色相).S指saturation(饱和度).V指val ...

  5. WPF-Binding的源

    1. 绑定到其它元素 <Grid> <StackPanel> <TextBox x:Name="textbox1" /> <Label C ...

  6. linux下的shell 快捷键

    Ctrl+p重复上一次命令Ctrl+a跳到第一个字符前Ctrl+x同上但再按一次会从新回到原位置Ctrl+b前移一个字符不删除字符情况下Ctrl+h删除前一个字符Ctrl+u删除提示符前的所有字符Ct ...

  7. MySQL左连接查询

    1.语法: select 字段列表 from table1 别名1 left join table2 别名2 on 连接条件 [where 子句]

  8. 服务器之FRU

    EEPROM是server主板上的电可擦除可编程只读存储器, 里面存储了FRU data, 包括制造商,产品型号,产品序列号,资产序列号等信息,为厂商和客户提供资产信息管理. 所以正确的FRU格式以及 ...

  9. spring mvc3.1 @ResponseBody注解生成大量Accept-Charset

    Spring3 MVC使用@ResponseBody后会产生非常大的响应头(Accept-Charset会达到4K+).原因在于默认情况下StringHttpMessageConverter.writ ...

  10. SAE+wordpress邮箱问题,WP MAIL STMP插件配置但无效解决的方法

    我在SAE上面部署的WordPress是3.9版本号的,而非SAE应用商店里WordPress4sae是3.4的,虽然3.9版本号的确有非常多改进但在部署在SAE上面时须要做非常多改动,并且有些插件也 ...