/// <summary> /// Kiểm tra có là đèn đỏ /// True: on /// False: off /// </summary> /// //public bool CheckRedLightStatus() //{ // //GetPicSnap(); // if (OriginImage == null) // { // CheckRedLightStatus(); // } // //Image<Gray, Byte> grayImg = new Image<Gray, byte>(BitMap.Bitmap); // Mat grayImg = new Mat(); // CvInvoke.CvtColor(OriginImage, grayImg, ColorConversion.Bgr2Gray); // Bitmap img = grayImg.Bitmap; // int R = img.GetPixel(X, Y).R; // int xTemp1, xTemp2, xTemp3, xTemp4; // int yTemp1, yTemp2, yTemp3, yTemp4; // xTemp1 = xTemp2 = xTemp3 = xTemp4 = X; // yTemp1 = yTemp2 = yTemp3 = yTemp4 = Y; // int widthPixel = 3; //Lấy trung bình của bao nhiêu pixel từ điểm trung tâm // for (int i = 0; i < widthPixel; i++) // { // xTemp1 += 1; // xTemp2 -= 1; // xTemp3 -= 1; // xTemp4 += 1; // for (int j = 0; j < widthPixel; j++) // { // yTemp1 += 1; // yTemp2 += 1; // yTemp3 -= 1; // yTemp4 -= 1; // Color pixelColor1, pixelColor2, pixelColor3, pixelColor4; // pixelColor1 = img.GetPixel(xTemp1, yTemp1); // pixelColor2 = img.GetPixel(xTemp2, yTemp2); // pixelColor3 = img.GetPixel(xTemp3, yTemp3); // pixelColor4 = img.GetPixel(xTemp4, yTemp4); // R += (int)(pixelColor1.R + pixelColor2.R + pixelColor3.R + pixelColor4.R); // } // } // int avgR = (R / ((widthPixel * widthPixel * 4) + 1)); // if ((avgR > 200)) // { // return true; // } // else // { // return false; // } //} /// <summary> /// Check red light status. /// Return: 1, 2, 3 via red, yellow, green status. /// </summary> /// <returns>1, 2, 3 via red, yellow, green status.</returns> public int CheckLightStatusV3() { int statusLight = 0; bool redResult = false, yellowResult = false, greenResult = false; Image <Bgr, Byte> redImg = OriginImage.Clone(); Image <Bgr, Byte> greenImg = OriginImage.Clone(); Image <Bgr, Byte> yellowImg = OriginImage.Clone(); redImg.ROI = new Rectangle(RedPoint.X, RedPoint.Y, WidthPixel, WidthPixel); yellowImg.ROI = new Rectangle(YellowPoint.X, YellowPoint.Y, WidthPixel, WidthPixel); greenImg.ROI = new Rectangle(GreenPoint.X, GreenPoint.Y, WidthPixel, WidthPixel); Image <Gray, Byte> redProcessed = processImage(redImg); Image <Gray, Byte> yellowProcessed = processImage(yellowImg); Image <Gray, Byte> greenProcessed = processImage(greenImg); double redValue = redProcessed.GetAverage().MCvScalar.V0; double yellowValue = yellowProcessed.GetAverage().MCvScalar.V0; double greenValue = greenProcessed.GetAverage().MCvScalar.V0; if (redProcessed.GetAverage().MCvScalar.V0 >= Threshold) { redResult = true; } if (yellowProcessed.GetAverage().MCvScalar.V0 >= Threshold) { yellowResult = true; } if (greenProcessed.GetAverage().MCvScalar.V0 >= Threshold) { greenResult = true; } if (redResult == true && yellowResult == false && greenResult == false) { statusLight = 1; } else if (redResult == false && yellowResult == true && greenResult == false) { statusLight = 2; } else if (redResult == false && yellowResult == false && greenResult == true) { statusLight = 3; } else { statusLight = 0; } return(statusLight); }
public void ShowPointInformation(double x, double y) { if (_capture == null) { return; } int frameIndex = (int)_capture.GetCaptureProperty(CapProp.PosFrames) - 1; if (frameIndex == -1) { return; } var keyFeaturesVector = _projectFile.Model.GetKeyFeatures(frameIndex); var nearestKeyFeature = GetNearestKeyPoint(x, y, keyFeaturesVector); var keyIndex = keyFeaturesVector.FirstIndexOf(keyFeature => keyFeature.Point == nearestKeyFeature.Point); var chain = _projectFile.Model.GetChain(frameIndex, keyIndex); int firstFrame = frameIndex; int lastFrame = frameIndex; foreach (var pair in chain) { firstFrame = Math.Min(firstFrame, pair.Item1); lastFrame = Math.Max(lastFrame, pair.Item1); } PointInformation = String.Format(Strings.PointInformationFormat, firstFrame, frameIndex, lastFrame); var image = (IImage)OriginImage.Clone(); CvInvoke.Circle(image, Point.Round(nearestKeyFeature.Point), 5, new Bgr(Color.Yellow).MCvScalar, 2); VideoImageSource = image; }