#c# #winforms #picturebox #pixels #yuv
#c# #winforms #picturebox #пиксель #yuv
Вопрос:
ОК. Короче говоря, предположим:
-
У меня есть монохромное изображение; И изначально оно было представлено в цветовом пространстве RGB.
-
Я не знаю, в какой последовательности я должен это делать, но мне нужно преобразовать изображение в пространство YUV (a) и загрузить его в
PictureBox
элемент управления (b) и сделать несколько цветных каракулей; -
И, наконец, мне нужно как-то узнать, какие пиксели были окрашены.
И как мне нарисовать линии / точки на загруженном изображении в
PictureBox
?
Есть какие-нибудь идеи?
Ответ №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
метод для рисования линий.
Для рисования пикселей используйте SetPixel
метод Bitmap
объекта.
Комментарии:
1. 1 Хороший ответ, но с одной оговоркой … Цветовая матрица, о которой вы говорили выше, предназначена для старого преобразования NTSC / EBU и может привести к смещению при смешивании и сопоставлении в цепочке. Я думаю, вы дали op достаточно для начала, но ради потомков я называю это «не просто копируйте это».
2. Мне нужно изменить изображение после того, как я начерчу линии. Как мне это сделать. И о преобразовании. Как мне программно определить, является ли загружаемое изображение монохромным? Если R == G amp;amp; G == B amp;amp; B == R?
3. @Джон Грин: Если я вас правильно понимаю, вы имеете в виду, что YUV используется для аналогового кодирования, и вполне возможно, что на самом деле требуется цветовое пространство YCbCr, которое имеет другое преобразование.
4. @Guffa — Да, хотя различия незначительны. Правильно, YUV относится к старому формату EBU, а YIQ относится к старому формату NTSC. YCbCr по-прежнему выполняет преобразование с указанными выше коэффициентами, но это не приведет к получению изображения точно так, как если бы оно было пропущено, скажем, через конвертер современной схемы сжатия.
5. @helicera: Вы можете изменить изображение любым удобным для вас способом после рисования линий. Чтобы проверить, является ли цвет монохромным, вам нужно только проверить,
R == G amp;amp; G == B
если это верно, вы знаете, что этоB == R
также верно.