如何在C#中使用Emgu显示YCbCr图像?

时间:2014-02-19 16:57:19

标签: c# emgucv

我有一个位图作为源;

我使用Image<Bgr,Byte> img = new Image<Bgr,Byte>(bmp);

创建了一个Emgu图像

我使用Image<Ycc,Byte> YCB = img.Convert<Ycc,Byte>();

将其转换为YCbCr图像

我从工具箱中拖出一个图像框并将其分配给YCB -----&gt; imagebox1.Image=YCB;

但结果显示RGB格式的图像就像源位图

一样

我不明白哪里出错了

有人可以给我一些线索吗?

1 个答案:

答案 0 :(得分:0)

您是否对YCB进行了任何更改?如果您只是显示它,那么它看起来与原始相同。

如果在运行程序时右键单击图像框并选择属性,它将告诉您图像的类型,并显示YCB图像中保存的数据,这应与原始图像不同。或者只显示图像矩阵的1个通道,这样对于BGR显示蓝色,这显然会显示为单色灰度图像。现在,对于YCB再次显示Luma通道,这将显示为单色灰度图像。你会发现它们之间有轻微的变化,因为亮度代表所有3种颜色光谱的亮度。

            CvInvoke.cvShowImage("Blue", img [0]);
            CvInvoke.cvShowImage("Luma", YCB[0]);

如果你想看到更大的差异,则将Luma乘以2,你就会得到完全不同的图像。

            YCB[0] *= 2;
            CvInvoke.cvShowImage("Luma Change", YCB);

CvInvoke.cvShowImage()方法是一个很好的工具,用于调试代码并逐步查看代码对图像的作用。

为了他人的好处,Ycc是YCbCr色彩空间:http://en.wikipedia.org/wiki/YCbCr

干杯,

克里斯