如何使用 Emgu CV 突出显示图像上的角点

问题描述 投票:0回答:1

我正在尝试检测棋盘图像上的角点,然后在图像的这些部分上绘制圆圈。我查阅了 Emgu Cv 的文档,有两种方法可以做到这一点。

  1. 就是使用Image类的FindCornerSubPixel()方法
  2. 使用 CvInvoke.HarrisCorner(...) 方法

我正在使用第二种方法来执行此操作,因为我不知道如何使用第一种方法来执行此操作。我的尝试如下所示,但出现异常

OpenCV:!image.empty()。

我的代码的实现细节如下所示

var pth = paths[index];
//load the image in grayscale
var image = new Image<Gray, byte>(pth);
//initialize an empty image for displaying the corners
var cornerImage = new Mat();
//call the corner recognition algorithm
CvInvoke.CornerHarris(image, cornerImage, blockSize:3,apertureSize:3,k:0.01);
//save the image with corners 
cornerImage.Save("temp.png");

任何有关如何使用这些方法成功检测棋盘图像上的角点的帮助都将受到高度赞赏。

c# emgucv
1个回答
1
投票

我建议使用FindChessboardCorners

var result = new VectorOfPointF();
bool foundCorners = CvInvoke.FindChessboardCorners(
                            image, 
                            new Size(6, 9), 
                            result)

这专门用于检测棋盘的角点,因此应该提供比 HarrisCorner 更可靠的结果,但确实需要您知道棋盘中有多少个方格。

如果您需要更准确的位置,您可以使用 FindCornerSubPixel 来获得更准确的位置。我无法判断子像素位置是否对您的应用程序有帮助。我们只是使用 FindChessboardCorners,没有任何子像素细化。

如果您想标记角点,您可以使用“绘制方法”在图像上找到角点。但您也可以使用 System.Drawing 绘制到 Bitmap,或直接绘制到屏幕。

    

© www.soinside.com 2019 - 2024. All rights reserved.