/// <summary> /// 画外接矩 /// </summary> private void DrawContourRectangle(ContoursArgs e) { VectorOfPoint cnt = e.Contours[e.ContourIndex]; Rectangle rectangle = CvInvoke.BoundingRectangle(cnt); CvInvoke.Rectangle(mTempImage, rectangle, e.Color, e.Thickness); }
/// <summary> /// 画最小外接圆 /// </summary> private void DrawContourCircle(ContoursArgs e) { VectorOfPoint cnt = e.Contours[e.ContourIndex]; CircleF circleF = CvInvoke.MinEnclosingCircle(cnt); //取整 Point center = Point.Round(circleF.Center); CvInvoke.Circle(mTempImage, center, (int)circleF.Radius, e.Color, e.Thickness); }
private void FrmContours_PassValuesEvent(object sender, ContoursArgs e) { if (e.InitPicture) { //原图是彩色图,先转成灰度图 if (mCurrentImage.NumberOfChannels != 1) { CvInvoke.CvtColor(mCurrentImage, mTempImage, ColorConversion.Bgr2Gray); } else { mTempImage = mCurrentImage.Clone(); } //如果层叠显示,那么只初始化一次 e.InitPicture = !e.CascadeDrawing; } //为了绘制,再转成彩色图 if (mTempImage.NumberOfChannels == 1) { CvInvoke.CvtColor(mTempImage, mTempImage, ColorConversion.Gray2Bgr); } switch (e.FeatureType) { case ContourFeatureType.Contour: DrawContourContours(e); break; case ContourFeatureType.Rectangle: DrawContourRectangle(e); break; case ContourFeatureType.MinRectangle: DrawContourMinRectangle(e); break; case ContourFeatureType.MinCircle: DrawContourCircle(e); break; default: /* Do Nothing */ break; } mFrmMainImage.SetImageSource(mTempImage); }
/// <summary> /// 画最小外接矩 /// </summary> private void DrawContourMinRectangle(ContoursArgs e) { VectorOfPoint cnt = e.Contours[e.ContourIndex]; RotatedRect rotatedRect = CvInvoke.MinAreaRect(cnt); PointF[] pointF = CvInvoke.BoxPoints(rotatedRect); //取整 Point[] pointInt = new Point[pointF.Length]; for (int i = 0; i < pointF.Length; i++) { pointInt[i] = Point.Round(pointF[i]); } VectorOfPoint vector = new VectorOfPoint(pointInt); VectorOfVectorOfPoint vector2 = new VectorOfVectorOfPoint(vector); CvInvoke.DrawContours(mTempImage, vector2, -1, e.Color, e.Thickness); }
/// <summary> /// 画轮廓 /// </summary> private void DrawContourContours(ContoursArgs e) { CvInvoke.DrawContours(mTempImage, e.Contours, e.ContourIndex, e.Color, e.Thickness); }