我正在关注 youtube 上的 Luca Del Tongo 教程,以便从面部跟踪眼睛。我设法使用矩形来做到这一点,但我想使用 HoughCircle 来跟踪它。 https://www.youtube.com/watch?v=07QAhRJmcKQ
我正在使用以下代码来跟踪我的眼睛,它在我的眼睛周围创建了多个圆圈。 正如他在教程中告诉我们的那样,我只将图像转换为灰度。你能帮忙吗?我是 EMGU CV 的新手
grayFrame.ROI = possibleROI_leftEye;
MCvAvgComp[][] leftEyesDetected = grayFrame.DetectHaarCascade(_eyes, 1.15, 0, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));
grayFrame.ROI = Rectangle.Empty;
grayFrame.ROI = possibleROI_rightEye;
MCvAvgComp[][] rightEyesDetected = grayFrame.DetectHaarCascade(_eyes, 1.15, 0, Emgu.CV.CvEnum.HAAR_DETECTION_TYPE.DO_CANNY_PRUNING, new Size(20, 20));
grayFrame.ROI = Rectangle.Empty;
//If we are able to find eyes inside the possible face, it should be a face, maybe we find also a couple of eyes
if (leftEyesDetected[0].Length != 0 && rightEyesDetected[0].Length != 0)
{
//draw the face
frame.Draw(face.rect, new Bgr(Color.Violet), 2);
#region Hough Circles Eye Detection
grayFrame.ROI = possibleROI_leftEye;
CircleF[] leftEyecircles = grayFrame.HoughCircles(new Gray(180), new Gray(70), 5.0, 10.0, 1, 200)[0];
grayFrame.ROI = Rectangle.Empty;
foreach (CircleF circle in leftEyecircles)
{
float x = circle.Center.X + startingLeftEyePointOptimized.X;
float y = circle.Center.Y + startingLeftEyePointOptimized.Y;
frame.Draw(new CircleF(new PointF(x, y), circle.Radius), new Bgr(Color.RoyalBlue), 4);
}
grayFrame.ROI = possibleROI_rightEye;
CircleF[] rightEyecircles = grayFrame.HoughCircles(new Gray(180), new Gray(70), 2.0, 20.0, 1, 5)[0];
grayFrame.ROI = Rectangle.Empty;
foreach (CircleF circle in rightEyecircles)
{
float x = circle.Center.X + startingPointSearchEyes.X;
float y = circle.Center.Y + startingPointSearchEyes.Y;
frame.Draw(new CircleF(new PointF(x, y), circle.Radius), new Bgr(Color.RoyalBlue), 4);
}
#endregion
现在我把它找到眼睛的部分改成了
grayImageFrame.ROI = possibleROI_leftEye;
CircleF[] leftEyecircles = grayImageFrame.HoughCircles(new Gray(180), new Gray(70), 5.0, 10.0, 1, 20)[0];
if (leftEyecircles.Length > 0)
{
CircleF firstCircle = leftEyecircles[0]; // Pick first circle in list
float x = firstCircle.Center.X + startingPointSearchEyes.X;
float y = firstCircle.Center.Y + startingPointSearchEyes.Y;
ImageFrame.Draw(new CircleF(new PointF(x, y), firstCircle.Radius), new Bgr(Color.RoyalBlue), 4);
}
grayImageFrame.ROI = possibleROI_rightEye;
CircleF[] rightEyecircles = grayImageFrame.HoughCircles(new Gray(180), new Gray(70), 5.0, 10.0, 1, 20)[0];
grayImageFrame.ROI = Rectangle.Empty;
if (rightEyecircles.Length > 0)
{
CircleF firstCircle = rightEyecircles[0]; // Pick first circle in list
float x = firstCircle.Center.X + startingPointSearchEyes.X;
float y = firstCircle.Center.Y + startingPointSearchEyes.Y;
ImageFrame.Draw(new CircleF(new PointF(x, y), firstCircle.Radius), new Bgr(Color.RoyalBlue), 4);
}
只显示一个圆圈,但它跟踪的是我眼睛周围的部分,而不是我的眼睛:(