#region 滚动条操作演示 -- 调整图片亮度
static Mat src;
static Mat Temp_Mat ;
static Mat output_Mat;
static int Lightness = 50;
static void Main(string[] args)
{
src = Cv2.ImRead("lenna.png", ImreadModes.AnyColor);
Temp_Mat = new Mat(src.Height, src.Width, src.Type(), new Scalar(0, 0, 0));
output_Mat = new Mat(src.Height, src.Width, src.Type(), new Scalar(0, 0, 0));
if (src.Empty())
{
Console.WriteLine("图像未成功加载...");
return;
}
Cv2.ImShow("src image", src);
TrackbarCallbackNative OnTrack = new TrackbarCallbackNative(Trackbar);
Cv2.NamedWindow("亮度调整",WindowFlags.AutoSize);
Cv2.CreateTrackbar("亮度调整", "亮度调整", ref Lightness,100, OnTrack);
Cv2.WaitKey();
Cv2.DestroyAllWindows();
}
static void Trackbar(int pos, IntPtr userData)
{
for (int row = 0; row < Temp_Mat.Height; row++)
{
for (int col = 0; col < Temp_Mat.Width; col++)
{
if (Temp_Mat.Channels() == 1)//灰色图像
{
Temp_Mat.Set<byte>(row, col, (byte)pos);//这里用参数Pos或者全局变量Lightness 都是可以的
}
else//彩色图像
{
Vec3b color = Temp_Mat.Get<Vec3b>(row, col);
color.Item0 = (byte)(pos);//这里用参数Pos或者全局变量Lightness 都是可以的
color.Item1 = (byte)(pos);
color.Item2 = (byte)(pos);
Temp_Mat.Set<Vec3b>(row, col, color);
}
}
}
Cv2.Add(src, Temp_Mat, output_Mat);
Cv2.ImShow("亮度调整", output_Mat);
}
#endregion
CreateTrackbar函数定义
public static int CreateTrackbar(string trackbarName, string winName, int count, [NullableAttribute(2)] TrackbarCallbackNative onChange = null, IntPtr userData = default(IntPtr));
public static int CreateTrackbar(string trackbarName, string winName, ref int value, int count, [NullableAttribute(2)] TrackbarCallbackNative onChange = null, IntPtr userData = default(IntPtr));
winName要以前用NamedWindow函数创建好
OnTrack 是创建的TrackbarCallbackNative委托对象
TrackbarCallbackNative是一个委托
public delegate void TrackbarCallbackNative(int pos, IntPtr userData);