我有一个位图作为源;
我使用Image<Bgr,Byte> img = new Image<Bgr,Byte>(bmp);
我使用Image<Ycc,Byte> YCB = img.Convert<Ycc,Byte>();
我从工具箱中拖出一个图像框并将其分配给YCB -----&gt; imagebox1.Image=YCB;
但结果显示RGB格式的图像就像源位图
一样我不明白哪里出错了
有人可以给我一些线索吗?
答案 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
干杯,
克里斯