根据百度以及实际操作,发现掩膜操作是增加图片的对比度
方法 Cv2.Filter2D()有7个参数,如下
static void Main(string[] args)
{
string imangPath = @"I:\OpenCvSharp学习\4.jpg";
Mat redMat = new Mat(imangPath, ImreadModes.AnyColor);//读取图像
if (redMat.Data==null)
{
Console.WriteLine("读取错误");
return;
}
Window loadWindpw = new Window("Input",WindowMode.AutoSize, redMat);
Mat newMat = new Mat();
//定义2D掩膜
//以下是关键,没太搞清楚,万能的大神的答案(kernel )
InputArray kernel = InputArray.Create<int>(new int[3, 3] { { 0, -1, 0 }, { -1, 5, -1 }, { 0, -1, 0 } });
//掩膜操作,提高对比度
Cv2.Filter2D(redMat, newMat, -1, kernel, new Point(-1, 1), 0, BorderTypes.Default);
Window newWindpw = new Window("Output", WindowMode.AutoSize, newMat);
Cv2.WaitKey(0);
}
反转单通道像素值(将彩色图转为灰度图然后在反转像素)
//单通道像素反转,先把图像转为灰色的单通道图,然后再用255-当前像素值
Mat GrayMat = new Mat();
Cv2.CvtColor(ModifyMat, GrayMat, ColorConversionCodes.BGRA2GRAY);
Mat ReverseMat = new Mat();
GrayMat.CopyTo(ReverseMat);
for (int i = 0; i < ReverseMat.Rows; i++)
{
for (int j = 0; j < ReverseMat.Cols; j++)
{
byte Pixel=ReverseMat.At<byte>(i, j);//获得该点的像素值
Pixel = (byte)(255 - Pixel);
ReverseMat.Set(i, j, Pixel);
}
}
Window OutWindows4 = new Window("GrayMat", WindowMode.AutoSize, GrayMat);
Window OutWindows5 = new Window("ReverseMat", WindowMode.AutoSize, ReverseMat);
三通道像素反转
//多通道像素反转
Mat Mat3CHModify = new Mat();
ModifyMat.CopyTo(Mat3CHModify);
for (int i = 0; i < Mat3CHModify.Rows; i++)
{
for (int j = 0; j < Mat3CHModify.Cols; j++)
{
Vec3b vec = new Vec3b();
vec.Item0 = (byte)(255 - (Mat3CHModify.At<Vec3b>(i, j)[0]));
vec.Item1 = (byte)(255 - (Mat3CHModify.At<Vec3b>(i, j)[1]));
vec.Item2 = (byte)(255 - (Mat3CHModify.At<Vec3b>(i, j)[2]));
Mat3CHModify.Set<Vec3b>(i, j, vec);
}
}
Window OutWindows5 = new Window("Mat3CHModify", WindowMode.AutoSize, Mat3CHModify);
上面写了那么多反转像素的,其实OpenCvSharp提供了反转像素的API
Cv2.BitwiseNot(src, dst); //反转像素函数**
不需要挨个的去操作每一个像素了,直接去调用它吧
在图片输出的时候也能做到反转,就是在输出的图片前面加上”~”取反符号就行了
Window OutWindows5 = new Window("Mat3CHModify", WindowMode.AutoSize, ~Mat3CHModify);**