后台管理网站名,网站建设报价,中国八大设计院指的是哪些,杭州网企业网站建设C# - Opencv应用#xff08;3#xff09; 之矩阵Mat使用[图像截取粘贴、ROI操作、位运算、数学计算]
图像读取#xff0c;大小、截取、位运算图像ROI操作#xff1a;粘贴赋值、滤波图像数学计算部分结果如下#xff1a;
1.图像读取#xff0c;大小、截取、位运算 //图…C# - Opencv应用3 之矩阵Mat使用[图像截取粘贴、ROI操作、位运算、数学计算]
图像读取大小、截取、位运算图像ROI操作粘贴赋值、滤波图像数学计算部分结果如下
1.图像读取大小、截取、位运算 //图像显示private static void showImg(string w_name,Mat img,int flg0){Cv2.NamedWindow(w_name, 0);Cv2.ImShow(w_name, img);Cv2.WaitKey(flg);}private static void SubMat(){var src Cv2.ImRead(./images/Lenna.png);if(src.Empty()){Console.WriteLine(请检查图像输入\n);}else{Console.WriteLine(读取图像大小[ src.Rows , src.Cols ]);}showImg(src, src);// Assign small image to matvar small new Mat();Cv2.Resize(src, small, new Size(100, 100));src[10, 110, 10, 110] small;showImg(src1, src);src[370, 470, 400, 500] small.T();showImg(src2, src);// ↑ This is same as the following://small.T().CopyTo(src[370, 470, 400, 500]);// Get partial mat (similar to cvSetImageROI)Mat part src[200, 400, 200, 360];// Invert partial pixel valuesCv2.BitwiseNot(part, part);// Fill the region (50..100, 100..150) with color (128, 0, 0)part src.SubMat(50, 100, 400, 450);part.SetTo(128);using (new Window(SubMat, src)){Cv2.WaitKey();}part.Dispose();}2. 图像ROI操作粘贴赋值、滤波
针对不同范围的区域即ROI进行不同的操作根本上是像素/灰度值的改变 //图像行列中的某些范围做操作private void RowColRangeOperation(){using var src Cv2.ImRead(ImagePath.Lenna);Cv2.GaussianBlur(src.RowRange(100, 200),src.RowRange(200, 300),new Size(7, 7), 20);Cv2.GaussianBlur(src.ColRange(200, 300),src.ColRange(100, 200),new Size(7, 7), 20);using (new Window(RowColRangeOperation, src)){Cv2.WaitKey();}}/// summary/// Submatrix expression operations/// /summaryprivate void RowColOperation(){using var src Cv2.ImRead(ImagePath.Lenna);var rand new Random();for (int i 0; i 200; i){int c1 rand.Next(100, 400);int c2 rand.Next(100, 400);using Mat temp src.Row(c1).Clone();src.Row(c2).CopyTo(src.Row(c1));temp.CopyTo(src.Row(c2));}((Mat)~src.ColRange(450, 500)).CopyTo(src.ColRange(0, 50));src.RowRange(450, 460).SetTo(new Scalar(0, 0, 255));using (new Window(RowColOperation, src)){Cv2.WaitKey();}}3.图像数学计算
通过矩阵进行普通与归一化矩阵计算
//数学计算/// summary/// Solve equation AX Y/// /summaryprivate static void ByMat(){// x y 10// 2x 3y 26// (x4, y6)double[,] av {{1, 1},{2, 3}};double[] yv { 10, 26 };var a new Mat(2, 2, MatType.CV_64FC1, av);var y new Mat(2, 1, MatType.CV_64FC1, yv);var x new Mat();Cv2.Solve(a, y, x, DecompTypes.LU);Console.WriteLine(ByMat:);Console.WriteLine(X1 {0}, X2 {1}, x.Atdouble(0), x.Atdouble(1));}/// summary/// Solve equation AX Y/// /summaryprivate static void ByNormalArray(){// x y 10// 2x 3y 26// (x4, y6)double[,] a {{1, 1},{2, 3}};double[] y { 10, 26 };var x new System.Collections.Generic.Listdouble();Cv2.Solve(InputArray.Create(a), InputArray.Create(y),OutputArray.Create(x),DecompTypes.LU);Console.WriteLine(ByNormalArray:);Console.WriteLine(X1 {0}, X2 {1}, x[0], x[1]);} 完整代码
主要代码结构如下
using System;
using OpenCvSharp;namespace SamplesCore
{/// summary/// /// /summaryclass MatOperations{static void Main(string[] args){ByMat();ByNormalArray();SubMat();RowColRangeOperation();RowColOperation();return;}//函数定义。。。。。。}
}