2014-02-19 1 views
0

У меня есть растровое изображение в качестве источника;Как показать изображение YCbCr с помощью Emgu в C#?

Я создал Emgu изображение с Image<Bgr,Byte> img = new Image<Bgr,Byte>(bmp);

я преобразовал его в YCbCr изображение с помощью Image<Ycc,Byte> YCB = img.Convert<Ycc,Byte>();

Я перетащил Imagebox из панели инструментов и назначил его YCB ----->imagebox1.Image=YCB;

, но результат показывает изображение в формате RGB точно так же, как исходный битмап

Не понимаю, где пошло не так

Может ли кто-нибудь дать мне несколько подсказок?

ответ

0

Вы внесли какие-либо изменения в YCB? Если вы просто покажете его, он будет выглядеть идентично оригиналу.

Если вы щелкните правой кнопкой мыши на своем образе изображения при запуске программы и выберите свойство, оно сообщит вам тип изображения и покажет вам данные, хранящиеся в изображении YCB, это должно отличаться от вашего оригинала. В качестве альтернативы просто покажите 1 канал вашей матрицы изображений, чтобы ваш BGR показывал синий цвет, это, очевидно, будет отображаться как одноцветное изображение в оттенках серого. Теперь, когда YCB снова отобразит канал Luma, это будет отображаться как одноцветное изображение в оттенках серого. Вы заметите небольшое изменение между ними, поскольку яркость представляет яркость всех трех цветовых спектров.

  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

Cheers,

Крис

+0

cvInvoke действительно помогает мне много, спасибо. – APU

Смежные вопросы