如何将YUV文件中每帧的数据转换成OpenCV中的Ipl

 我来答
昕菡浮牧懂0d
推荐于2016-10-08 · TA获得超过13.9万个赞
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部

实现代码如下:

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(&quot;Error: File end!\\n&quot;);
//****************************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(&quot;CurrFrame&quot;, pCurrFrame);
                if( cvWaitKey(33) >= 0 )
              break;
        }
匿名用户
2015-01-03
展开全部
这个貌似上面的方法好象都不是很好

其实文本数字转数值数字很容易

一般的对原数值进行加减0、乘除1,都可以,还有就是在计算的时候,前面加“--”,负负得正吗,明白
其实方法很多的,用VALUE函数转换也可以

其他自己探索去吧

骆辙巴途嵇矜子文涌释介丹瑕叶地渲瑕外禧枊陀
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式