将yuv转换为Opencv中的Ipl


<span style="font-size:18px;">int colorchannel = 3;
IplImage *pCurrFrame = NULL;
pInFile = fopen(input.infile, "rb");
    if (pInFile == NULL)
        {
                printf("Error: Can\'t open input YUV file\\n");
        exit(-1); 
        }
        fseek(pInFile, 0, SEEK_SET);
        pCurrFrame = cvCreateImageHeader( cvSize(input.img_width,input.img_height),
                        IPL_DEPTH_8U, colorchannel);
        cvNamedWindow("CurrFrame", 1);
        for(framenum = 0; framenum<input.no_frames; framenum++)
        {
                posstep =  img_size;
                fseek(pInFile, posstep, SEEK_CUR);
                if (fread(org_yuv_buffer, 1, img_size, pInFile)<(Byte)img_size)
                    printf("Error: File end!\\n");
//****************************Readin pixel values 
                //store 1/1 pixel value - luma
            for (j =0; j < input.img_height; j++)
                        for (i = 0; i < input.img_width; i++)
                                original_frame[0][j] = org_yuv_buffer[j * input.img_width + i];
        //store 1/1 pixel value - chroma
            for (j = 0; j < input.img_height/2; j++)
                        for (i = 0; i < input.img_width/2; i++)
                        {
                                original_frame[1][j] = org_yuv_buffer[img_Y_size + j * input.img_width/2 + i];
                            original_frame[2][j] = org_yuv_buffer[img_Y_size + img_UV_size + j * input.img_width/2 + i];
                        }
//****************************Convert YUV format to RGB format
                for (j =0; j < input.img_height; j++)
                        for (i = 0; i < input.img_width; i++)
                                {
                                //  Color B
                                        rgb_frame[j*input.img_width*colorchannel+i*colorchannel+0] = (Byte) (1.164*(original_frame[0][j] - 16)                                                                              + 2.018*(original_frame[1][j/2][i/2] - 128));
                                //  Color G
                                        rgb_frame[j*input.img_width*colorchannel+i*colorchannel+1] = (Byte) (1.164*(original_frame[0][j] - 16)                                                                              - 0.813*(original_frame[2][j/2][i/2] - 128)                                                                                         
- 0.391*(original_frame[1][j/2][i/2] - 128));
                                //  Color R
                                        rgb_frame[j*input.img_width*colorchannel+i*colorchannel+2] = (Byte) (1.164*(original_frame[0][j] - 16)                                                                              + 1.596*(original_frame[2][j/2][i/2] - 128));
                                }
                cvSetData(pCurrFrame, rgb_frame, input.img_width*colorchannel);
                cvShowImage("CurrFrame", pCurrFrame);
                if( cvWaitKey(33) >= 0 )
              break;
        }</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值