2013年8月16日 星期五

在WPF將RGB轉HSV調亮度後轉回RGB再SHOW圖 using Emgu CV

想法:因為系統需要由使用者動態調整亮度。
實作:
Code:
        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {  //sourceBgr&sourceHsv 事先建立
            Image<Rgb, byte> rgb = sourceBgr.Clone();
            Image<Hsv, byte> Hsv = sourceHsv.Clone();
            CvInvoke.cvCvtColor(rgb, Hsv, Emgu.CV.CvEnum.COLOR_CONVERSION.CV_RGB2HSV);     
            int  newValue=(int)e.NewValue; //取得slider事件發生後的值          
            string s = newValue.ToString();
            label1.Content = s;
            if (Hsv != null)
            {
                for (int j = 0; j < sourceHsv.Height; j++)
                {
                    for (int i = 0; i < sourceHsv.Width; i++)
                    {
                        byte value=0;
                        if (Hsv.Data[j, i, 2] + newValue > 255) value = 255;
                        else if (Hsv.Data[j, i, 2] + newValue < 0) value = 0;
                        else value = (byte)(Hsv.Data[j, i, 2] + newValue);

                        Hsv.Data[j, i, 2] = value;
                    }
                }
            }
            CvInvoke.cvCvtColor(Hsv, rgb, Emgu.CV.CvEnum.COLOR_CONVERSION.CV_HSV2RGB);

            image1.Source = rgb.ToBitmapSource();
        }

紀錄:Hsv的v(value)是亮度,只要調整它即可調整該PIXEL的亮度。

沒有留言:

張貼留言