根据百度以及实际操作,发现掩膜操作是增加图片的对比度
方法 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);**
