c# opencvsharp学习笔记(5)CvTrackbar,HSV,通道分割合并

1.CvTrackbar

public CvTrackbar(string name, string window, CvTrackbarCallback callback);
public CvTrackbar(string name, string window, CvTrackbarCallback2 callback);
        //
        // 摘要:
        //     Constructor
        //
        // 参数:
        //   name:
        //     Trackbar name滑动条的名字
        //
        //   window:
        //     Window name窗口名字,要依附的图片的窗口名,不能单独
        //
        //   value:
        //     Initial slider position初始滑块位置
        //
        //   max:
        //     The upper limit of the range this trackbar is working with.
        //此 trackbar 使用的范围的上限。
        //   callback:
        //     Callback handler   回调的句柄,就是名字,每次滑块改变位置时都要调用委托。
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback callback);

  
        public CvTrackbar(string name, string window, int value, int max, CvTrackbarCallback2 callback, object userdata);
//callback2支持同时传递两个变量


1.1创建一个trackbar并在控制中打印位置

       CvTrackbarCallback cvTrackbarcbV = new CvTrackbarCallback(Pos);
           //委托函数,就是把trackbar的值作为委托函数的实参调用委托的函数
            Window window = new Window("tbar");//创建一个新窗口"tbar"
            CvTrackbar cvTrackbarV = new CvTrackbar("bar", "tbar",cvTrackbarcbV);
            //在"tbar"窗口上加一个trackbar
            Cv2.WaitKey();


           //在main外声明一个函数
            static void Pos(int pos)
           {
            Console.WriteLine(pos);//把pos在控制台中打印出来
           }

c# opencvsharp学习笔记(5)CvTrackbar,HSV,通道分割合并_第1张图片

1.2创建一个trackbar在图片上把位置写出来

Mat sion = new Mat("Sion.png", ImreadModes.Color);//加载图片
CvTrackbarCallback2 cvTrackbarcbV = new CvTrackbarCallback2(Pos);//使用2,来传递2个变量
Cv2.ImShow("sion", sion);//打开窗口
CvTrackbar cvTrackbarV = new CvTrackbar("bar", "sion",0,255, cvTrackbarcbV,sion);//把sion也传递过去,直接依附在图片窗口上
Cv2.WaitKey();



//在main外声明
static void Pos(int pos, object userdata)
{
Mat a = (Mat)userdata;//接收sion并把object转换成mat
Mat sion = new Mat ();
a.CopyTo(sion);//不要直接用等于,因为那样字会直接叠在一起
Point point = new Point(100, 100);//字的位置
Cv2.PutText(sion, pos.ToString(), point, HersheyFonts.HersheyComplex, 2, Scalar.RandomColor(), 2);//写字
Cv2.ImShow("sion", sion);//刷新窗口
}

1.3创建一个trackbar用它来改变图片亮度

 Mat sion = new Mat("Sion.png", ImreadModes.Color);
            CvTrackbarCallback2 cvTrackbarcbV = new CvTrackbarCallback2(PosValue);
            Cv2.ImShow("sion", sion);
            CvTrackbar cvTrackbarV = new CvTrackbar("bar", "sion",0,255, cvTrackbarcbV,sion);
            Cv2.WaitKey();

            //在mian外声明
          static void PosValue(int pos, object userdata)
          {
            Mat a = (Mat)userdata;//接收sion并把object转换成mat
            Mat sion = new Mat();
            a.CopyTo(sion);
            Cv2.CvtColor(sion, sion, ColorConversionCodes.BGR2HSV);//BGR转成HSV
            Mat[] channel = Cv2.Split(sion);//分割通道
            for (int i = 0; i < channel[2].Rows; i++)//遍历所有像素
            {
                for (int j = 0; j < channel[2].Cols; j++)
                {
                    channel[2].Set(i, j, pos);//改变亮度
                }
            }
            //Cv2.ImShow("色调", channel[0]);
            //Cv2.ImShow("饱和度", channel[1]);
            //Cv2.ImShow("亮度", channel[2]);
            Cv2.Merge(channel, sion);//合并通道
            Cv2.CvtColor(sion, sion, ColorConversionCodes.HSV2BGR);//HSV必须转为BGR才能正常显示
            Cv2.ImShow("sion", sion);
          }

//hsv通道分别是   色调,饱和度,亮度。通过分割,合并通道的操作可以对单个通道的进行修改,在后面的目标追踪也会用到。    

c# opencvsharp学习笔记(5)CvTrackbar,HSV,通道分割合并_第2张图片
c# opencvsharp学习笔记(5)CvTrackbar,HSV,通道分割合并_第3张图片

你可能感兴趣的:(opencvsharp,c#)