加载图片
string imangPath = @"I:\OpenCvSharp学习\4.jpg";//原图加载路径
Mat LoadMat = new Mat(imangPath, ImreadModes.AnyColor);
if (LoadMat.Empty())
{
Console.WriteLine("加载错误");
return;
}
Mat ModifyMat = new Mat();
LoadMat.CopyTo(ModifyMat);//Copy图像
Window InputWindows = new Window("Input", WindowMode.Normal, LoadMat);//显示原图
获得每个像素点的值
for (int i = 0; i < ModifyMat.Rows; i++)
{
for (int j = 0; j < ModifyMat.Cols; j++)
{
Vec3b vec = new Vec3b();
vec.Item0 = (byte)ModifyMat.At<Vec3b>(i, j)[0];
vec.Item1 = (byte)ModifyMat.At<Vec3b>(i, j)[1];
vec.Item2 = (byte)ModifyMat.At<Vec3b>(i, j)[2];
Console.WriteLine(vec.Item0.ToString() + ',' + vec.Item1.ToString() + ',' + vec.Item2.ToString());
}
}
将每个像素点都减去一个数,达到降低亮度的目的
Mat ModifyNat1 = new Mat();
ModifyMat.CopyTo(ModifyNat1);
for (int i = 0; i < ModifyMat.Rows; i++)
{
for (int j = 0; j < ModifyMat.Cols; j++)
{
Vec3b vec = new Vec3b();
vec.Item0= (byte)ByteCase((ModifyMat.Get<Vec3b>(i, j).Item0 - 80));
vec.Item1 = (byte)ByteCase((ModifyMat.Get<Vec3b>(i, j).Item1 - 80));
vec.Item2 = (byte)ByteCase((ModifyMat.Get<Vec3b>(i, j).Item2 - 80));
ModifyNat1.Set(i, j, vec);
}
}
Window OutWindows2 = new Window("Output2", WindowMode.Normal, ModifyNat1);
将每个像素都加上一个数,达到增加亮度的目的
Mat ModifyNat2 = new Mat();
ModifyMat.CopyTo(ModifyNat2);
for (int i = 0; i < ModifyMat.Rows; i++)
{
for (int j = 0; j < ModifyMat.Cols; j++)
{
Vec3b vec = new Vec3b();
vec.Item0 = (byte)ByteCase((ModifyMat.Get<Vec3b>(i, j).Item0 + 40));
vec.Item1 = (byte)ByteCase((ModifyMat.Get<Vec3b>(i, j).Item1 + 40));
vec.Item2 = (byte)ByteCase((ModifyMat.Get<Vec3b>(i, j).Item2 + 40));
ModifyNat2.Set(i, j, vec);
}
}
Window OutWindows3 = new Window("Output3", WindowMode.Normal, ModifyNat2);
方法ByteCase:
将相素的数值进行加减的时候有超出规格的时候,用以下方法保证数值都在0-255
private static int ByteCase(int n)
{
if (n <= 0)
{
return 0;
}
else if (n > 255)
{
return 255;
}
else
{
return n;
}
}