厦门网站建设推广哪家好,镇江html5,徐州网站建设薇at57666y,宁波白云医院网站建设C# - Opencv应用#xff08;2#xff09; 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]
矩阵创建图像显示与保存像素读取与赋值新建sample02项目#xff0c;配置opencv4相关包#xff0c;新建.cs进行测试
1.矩阵创建
//创建空白矩阵
var dst new Mat()//创建并赋…C# - Opencv应用2 之矩阵Mat使用[矩阵创建、图像显示、像素读取与赋值]
矩阵创建图像显示与保存像素读取与赋值新建sample02项目配置opencv4相关包新建.cs进行测试
1.矩阵创建
//创建空白矩阵
var dst new Mat()//创建并赋值
var src new Mat(new Size(128, 128), MatType.CV_8U, Scalar.All(125))//图像拷贝
Mat dst src.Clone();图像显示与保存
private static void test_0()
{//全黑var mat new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(0, 0, 0));Cv2.NamedWindow(black, 0);Cv2.ImShow(black, mat);// 全白mat new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(255, 255, 255));Cv2.NamedWindow(white, 0);Cv2.ImShow(white, mat);Cv2.ImWrite(white.jpg, mat);
}像素读取与赋值
两种常用的图像遍历方式 private void GetSet(){using var mat new Mat(ImagePath.Lenna, ImreadModes.Color);for (int y 0; y mat.Height; y){for (int x 0; x mat.Width; x){Vec3b color mat.GetVec3b(y, x);Vec3b newColor new Vec3b(color.Item2, color.Item1, color.Item0);mat.SetVec3b(y, x, newColor);}}Cv2.ImShow(Slow, mat);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}/// summary/// Reasonably fast/// /summaryprivate void GenericIndexer(){using var mat new Mat(ImagePath.Lenna, ImreadModes.Color);var indexer mat.GetGenericIndexerVec3b();for (int y 0; y mat.Height; y){for (int x 0; x mat.Width; x){Vec3b color indexer[y, x];Vec3b newColor new Vec3b(color.Item2, color.Item1, color.Item0);indexer[y, x] newColor;}}Cv2.ImShow(GenericIndexer, mat);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}灰度图操作 private static void test_1(){var img new Mat(new Size(128, 128), MatType.CV_8U, 1);var pixel img.GetGenericIndexerint();for (var y 0; y img.Height; y){for (var x 0; x img.Width; x){pixel[y, x] x y;}}Cv2.NamedWindow(单通道,0);Cv2.ImShow(单通道, img);Cv2.WaitKey(0);
}三通道图操作
private static void test_2()
{//三通道using (var src new Mat(new Size(128, 128), MatType.CV_8UC3, new Scalar(20, 129, 250)))using (var dst new Mat()){for (var y 0; y src.Height; y){for (var x 0; x src.Width; x){var color src.GetVec3b(y, x);var temp color.Item0;color.Item0 color.Item2; // B - Rcolor.Item2 temp; // R - Bsrc.Set(y, x, color);}}src.CopyTo(dst);Mat dat dst.Clone();Cv2.NamedWindow(dst, 0);Cv2.ImShow(dst, dst);Cv2.WaitKey(0);}
}完整代码
using OpenCvSharp;namespace OpenCVSharpSample01
{class Program{static void Main(string[] args){test_0();test_1();test_2();}private static void test_0(){var mat new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(0, 0, 0));Cv2.NamedWindow(black, 0);Cv2.ImShow(black, mat);// 全白mat new Mat(new Size(600, 600), MatType.CV_8UC3, new Scalar(255, 255, 255));Cv2.NamedWindow(white, 0);Cv2.ImShow(white, mat);Cv2.ImWrite(white.jpg, mat);}private static void test_1(){var img new Mat(new Size(128, 128), MatType.CV_8U, 1);var pixel img.GetGenericIndexerint();for (var y 0; y img.Height; y){for (var x 0; x img.Width; x){pixel[y, x] x y;}}Cv2.NamedWindow(单通道,0);Cv2.ImShow(单通道, img);Cv2.WaitKey(0);}private static void test_2(){//三通道using (var src new Mat(new Size(128, 128), MatType.CV_8U, Scalar.All(125)))using (var dst new Mat()){for (var y 0; y src.Height; y){for (var x 0; x src.Width; x){var color src.GetVec3b(y, x);var temp color.Item0;color.Item0 color.Item2; // B - Rcolor.Item2 temp; // R - Bsrc.Set(y, x, color);}}src.CopyTo(dst);Mat dat dst.Clone();Cv2.NamedWindow(dst, 0);Cv2.ImShow(dst, dst);Cv2.WaitKey(0);}}}
}