Пример #1
0
        /// <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);
        }
Пример #2
0
        /// <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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
 /// <summary>
 /// 画轮廓
 /// </summary>
 private void DrawContourContours(ContoursArgs e)
 {
     CvInvoke.DrawContours(mTempImage, e.Contours, e.ContourIndex, e.Color, e.Thickness);
 }