【问题标题】:YUV color space and chrominanceYUV 色彩空间和色度
【发布时间】:2011-05-20 04:43:55
【问题描述】:

好的。简而言之,假设:

  1. 我有一张单色图像;最初它以 RGB 颜色空间表示。

  2. 我不知道我应该按什么顺序执行此操作,但我需要将图像转换为 YUV 空间 (a) 并将其加载到 PictureBox 控件 (b) 并制作一些颜色涂鸦;

  3. 最后我需要以某种方式了解/知道哪些像素是彩色的。

    以及如何在PictureBox 中加载的图像上绘制线条/点?

有什么想法吗?

【问题讨论】:

    标签: c# winforms picturebox pixels yuv


    【解决方案1】:

    将单色图像从 RGB 转换为 YUV 非常简单:

    Y = R
    U = 0
    V = 0
    

    Y 是亮度,计算为0.299 * R + 0.587 * G + 0.114 * B,但对于单色图像,R = G = B,它与(0.299+0.587+0.114) * R 相同,即1 * R

    U 被计算为0.436 * ((B - Y) / 0.886),但因为 Y = B 它总是为零。

    V 被计算为0.615 * ((R - Y) / 0.701),但因为 Y = R 它总是为零。


    要在Bitmap 对象上绘制线条,请使用Graphics.FromImage 方法为其创建Graphics 对象,然后使用DrawLine 方法绘制线条。

    要绘制像素,请使用Bitmap 对象的SetPixel 方法。

    【讨论】:

    • +1 很好的答案,但有一个警告......您在上面谈论的颜色矩阵用于旧的 NTSC/EBU 转换,如果在链中混合和匹配,可能会导致失职。我认为您已经为操作提供了很多开始,但为了后代的缘故,我将其称为“不要只是复制这个”。
    • 画线后需要修改图片。我怎么做。关于转换。如何以编程方式确定我上传的图像是否为单色?如果 R == G && G == B && B == R?
    • @John Green:如果我没听错的话,你指的是YUV是用于模拟编码的,完全有可能实际上是想要的YCbCr色彩空间,它有不同的转换.
    • @Guffa - 是的,尽管差异很小。正确地说,YUV 指的是旧的 EBU 格式,而 YIQ 指的是旧的 NTSC 格式。 YCbCr 仍然使用您上面的系数进行转换,但它不会像通过现代压缩方案的转换器那样生成图像。
    • @helicera:你可以在画完线条后以任何你喜欢的方式修改图像。要检查颜色是否为单色,您只需检查R == G && G == B,如果为真,则您知道B == R 也为真。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多