免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1606 | 回复: 0
打印 上一主题 下一主题

图象的色彩空间(yuv422) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-18 18:37 |只看该作者 |倒序浏览
  看了YUV420的采样和存取格式,感觉不是很难理解,所以又做了一个YUV422的SEQUENCE FILE的测试,然后这个测试就发现了一下几点:
1)必须要知道是PACK的还是PLANE的方式存。
2)转换的公式是什么样的。
首先,从http://www.cipr.rpi.edu/resource/sequences/itu601.html上下载了mobile的测试文件。因为这些文件都是一幅图片,所以写了一个程序把它写到一个文件里了。
然后,看他的README文件是这样说它的存取格式的:
+-----------+
+    YUV    +
+-----------+
Images in YUV format is planed-oriented, with all data for Y channel
comes first, followed by U and V data.
==========+============+=============+==========================================
Sequence    Frames      Resolution     Remark
==========+============+=============+==========================================
mobile
  color      94          720x576       ITU 601/PAL
                                       Interlaced, first field starts
                                       on first line
                                       4:2:2, 50 fields/sec
----------+------------+-------------+------------------------------------------
所以我在YUV420->RGB上修改了CONVERT 函数,实现这种格式的读取:
// convert  yuv422(planed) into rgb mode for further dispaly operations
void CYuvTstDlg::convert_yuv422_rgb(unsigned char * src, unsigned char * dst,
                                                                                 int width, int height, int flipUV, int ColSpace)
{
        unsigned char *Y, *U, *V ;
        int y1, y2, u, v ;
        int v1, v2, u1, u2 ;
        unsigned char *pty1, *pty2 ;
        int i, j ;
        unsigned char *RGB1, *RGB2 ;
        int r, g, b ;
        //Initialization
        Y = src;
        V = Y + width * height;
        U = Y + width * height + width * height / 2;
        pty1 = Y;       
        RGB1 = dst;
        for (j = 0; j > 10;        // 1.593
                                  u1 = ((u > 10;        //         0.390
                                  v2 = ((v > 10;        //                0.515
                                  u2 = ((u > 10;        //               2.015
                          }
              break;
              // PAL specific
                  case 1:
                        {
                                  v1 = ((v > 10;        //      1.1406
                                u1 = ((u > 10;        // 0.3984
                                v2 = ((v > 10;        // 0.5800
                                u2 = ((u > 10;        //              2.0312
                        }
              break;
              // V4l2
                  case 2:
                        {
                                v1 = ((v > 10;        //       1.406
                                u1 = ((u > 10;        //                0.343
                                v2 = ((v > 10;        //        0.718
                                u2 = ((u > 10;        // 1.773
                        }
              break;
            case 3:
                        {
                                v1 = u1 = v2 = u2 = 0;
                        }
              break;
            default:
              break;
            } // end switch
          //up-left
          y1 = (*pty1++);
          if (y1 > 0) {
              r = y1 + (v1);
              g = y1 - (u1) - (v2);
              b = y1 + (u2);
              r = CLIP (r);
              g = CLIP (g);
              b = CLIP (b);
          } else {
              r = g = b = 0;
          }
/*           *RGB1++ = r; */
/*           *RGB1++ = g; */
/*           *RGB1++ = b; */
            *RGB1++ = b;
          *RGB1++ = g;
          *RGB1++ = r;         
          //up-right
          y1 = (*pty1++);
          if (y1 > 0) {
              r = y1 + (v1);
              g = y1 - (u1) - (v2);
              b = y1 + (u2);
              r = CLIP (r);
              g = CLIP (g);
              b = CLIP (b);
          } else {
              r = g = b = 0;
          }
            *RGB1++ = b;
          *RGB1++ = g;
          *RGB1++ = r;
/*           *RGB1++ = r; */
/*           *RGB1++ = g; */
/*           *RGB1++ = b; */
       
       
        }
      //RGB1 += 3 * width;     
      //pty1 += width;
    }
}
然后转换的效果还不错,就是机器性能不行,显示不太流畅。
然而,对于PACK格式的,下面这个附件里有很完整的函数实现,但是,就是它的CONVER FORMULA不知道是不是正确的。

       
        文件:vpImageConvert.rar
        大小:3KB
        下载:
下载
       
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4591/showart_362942.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP