Exemple #1
0
        /// <summary>
        /// 霍夫直线变换
        /// </summary>
        private void DrawHoughLines(HoughsArgs e)
        {
            VectorOfPointF lines = new VectorOfPointF();

            CvInvoke.HoughLines(mTempImage, lines, e.Rho, Math.PI / 180, e.Threshold);

            //便于绘制,再转成彩色图
            CvInvoke.CvtColor(mTempImage, mTempImage, ColorConversion.Gray2Bgr);

            for (int i = 0; i < lines.Size; i++)
            {
                double rho   = lines[i].X;
                double theta = lines[i].Y;

                double a = Math.Cos(theta);
                double b = Math.Sin(theta);

                double x0 = a * rho;
                double y0 = b * rho;

                int x1 = (int)(x0 + 1000 * (-b));
                int y1 = (int)(y0 + 1000 * (a));
                int x2 = (int)(x0 - 1000 * (-b));
                int y2 = (int)(y0 - 1000 * (a));

                CvInvoke.Line(mTempImage, new Point(x1, y1), new Point(x2, y2), e.Color, e.Thickness);
            }
        }
Exemple #2
0
        private void FrmHoughs_PassValuesEvent(object sender, HoughsArgs e)
        {
            mTempImage = mCurrentImage.Clone();
            //如果是彩色图,先灰度化
            if (mTempImage.NumberOfChannels != 1)
            {
                CvInvoke.CvtColor(mTempImage, mTempImage, ColorConversion.Bgr2Gray);
            }

            switch (e.HoughTransType)
            {
            case HoughTransformType.Line:
                DrawHoughLines(e);
                break;

            case HoughTransformType.LineP:
                DrawHoughLinesP(e);
                break;

            case HoughTransformType.Circle:
                DrawHoughCircles(e);
                break;

            default:
                break;
            }

            mFrmMainImage.SetImageSource(mTempImage);
        }
Exemple #3
0
        /// <summary>
        /// 霍夫圆变换
        /// </summary>
        private void DrawHoughCircles(HoughsArgs e)
        {
            VectorOfPointF vectorOfPointF = new VectorOfPointF();

            CvInvoke.HoughCircles(mTempImage, vectorOfPointF, HoughType.Gradient, 1, e.Threshold);
            //ToDo: 霍夫圆变换效果无效,原因未明
            for (int i = 0; i < vectorOfPointF.Size; i++)
            {
                //var a = "fs";
            }
        }
Exemple #4
0
        /// <summary>
        /// 统计概率霍夫直线变换
        /// </summary>
        private void DrawHoughLinesP(HoughsArgs e)
        {
            LineSegment2D[] lines = CvInvoke.HoughLinesP(mTempImage, e.Rho, Math.PI / 180, e.Threshold);

            //便于绘制,再转成彩色图
            CvInvoke.CvtColor(mTempImage, mTempImage, ColorConversion.Gray2Bgr);
            for (int i = 0; i < lines.Length; i++)
            {
                CvInvoke.Line(mTempImage, lines[i].P1, lines[i].P2, e.Color, e.Thickness);
            }
        }