/// <summary> /// 模 /// </summary> /// <param name="image">图片对象</param> /// <returns></returns> public static Image Model(this Bitmap image) { using (Mat src = image.ToMat()) { using (Mat sobelX = new Mat()) { Cv2.Sobel(src, sobelX, MatType.CV_8U, 1, 0, 3, 0.4, 128); using (Mat sobelY = new Mat()) { Cv2.Sobel(src, sobelY, MatType.CV_8U, 0, 1, 3, 0.4, 128); Cv2.Sobel(src, sobelX, MatType.CV_16S, 1, 0); Cv2.Sobel(src, sobelY, MatType.CV_16S, 0, 1); // 计算L1模 using (Mat sobel = sobelX.Abs() + sobelY.Abs()) { double sobmin, sobmax; OpenCvSharp.Point minLoc, maxLoc; Cv2.MinMaxLoc(sobel, out sobmin, out sobmax, out minLoc, out maxLoc); using (Mat sobelL1Image = new Mat()) { sobel.ConvertTo(sobelL1Image, MatType.CV_8U, -255.0 / sobmax, 255); return(sobelL1Image.ToBitmap()); } } } } } }
public void Do(IVideo video) { Mat frame = video.GetNextFrame(); while (frame != null) { frame.ConvertTo(frame, MatType.CV_16SC3); Cv2.Subtract(frame, background, difference, _histChessboardModel.SquaresMask); difference = difference.Abs().ToMat(); ShowDiff(); bool[,] squareState = EstimateSquareStates(difference); stateRenderer.Render(squareState); frame = video.GetNextFrame(); } }