/// <summary> /// Check if the object blob found in inputImage is within the boundry /// Inside, return true, outside, return false /// </summary> /// <param name="inputImage"></param> /// <param name="boundry"></param> /// <returns></returns> public static bool mCheckBoundry(Image <Bgr, byte> inputImage, Rectangle boundry) { Image <Gray, byte> grayImg = inputImage.Convert <Gray, byte>(); grayImg = ImageProcessing.colorFilter(grayImg); Rectangle[] rect; ContourDetection.contourDetection(grayImg.Convert <Bgr, byte>(), out rect); return(rectInsideRect(rect[0], boundry)); }
public static int findMinDistance(Image <Bgr, Byte> imgOriginal) { ContourDetection.contourDetection(imgOriginal, false, false, "", out contourArea, out contourRect, out contourPoints); int minVal = imgOriginal.Width; foreach (Point p in contourPoints) { if (p.X < minVal) { minVal = p.X; } } return(minVal); }
public static Image <Bgr, byte> Detection(Image <Bgr, byte> originalImage, DetectionType DT, out ErrorCode Err) { Err = ErrorCode.Normal; Image <Bgr, byte> b = null; switch (DT) { case DetectionType.Feature: switch (_featureType) { case featureDetectionType.cannyEdge: b = ContourDetection.cannyEdges(originalImage, false).Convert <Bgr, Byte>(); break; case featureDetectionType.contour: b = ContourDetection.contourDetection(originalImage); break; case featureDetectionType.line: b = LineDetection.lineDetection(originalImage); break; } break; case DetectionType.Object: if (GV.imgOriginal != null && GV.object_img != null) { Image <Bgr, byte> outPutImg = GV.imgOriginal; switch (_objectType) { case objectDetectionType.SURF: if (!SURF.SearchObject_SURF(GV.imgOriginal.Convert <Gray, byte>(), GV.object_img.Convert <Gray, byte>(), out outPutImg)) { Err = ErrorCode.SearchSURF_Fail; } else { BindManager.BindMngr.GMessage.value = "Found using SURF"; } b = outPutImg; break; case objectDetectionType.FFT: if (!FFT.searchObject_FFT(GV.imgOriginal, GV.object_img, out outPutImg)) { Err = ErrorCode.SearchFFT_Fail; } else { BindManager.BindMngr.GMessage.value = "Found using FFT"; } b = outPutImg; break; case objectDetectionType.color: if (!ColorDetection2.Color_detection(GV.imgOriginal, GV.object_img, out outPutImg, Parameters._colorTolerance)) { Err = ErrorCode.SearchColor_Fail; } else { //outPutImg = ContourDetection.contourDetection(outPutImg); PointF[] pts = FindWhitePoints(outPutImg.Convert <Gray, byte>()); MCvBox2D box = SquareFittingWithAngle(pts); outPutImg.Draw(box, new Bgr(Color.Green), 2); BindManager.BindMngr.GMessage.value = $"Displaying matching colors. Angle [{box.angle}deg]"; } b = outPutImg; break; } } else if (GV.object_img == null) { Err = ErrorCode.No_object_image; } break; } return(b); }