对,我刚刚下载了这本书的 PDF,安装了 Emgu CV,并按照与您相同的过程进行操作。除非我成功了;-)
我认为您错过的只是在调用cvCornerHarris
. 然后将Image
对象传递给它。
以下是我使用 Visual Studio 2012 在 C# 中的 Windows 窗体应用程序中开发的代码的主要部分。首先,我用来保存图像对象的一些成员变量:
// original source image as grayscale
private Image<Gray, Byte> m_SourceImage = null;
// raw corner strength image (must be 32-bit float)
private Image<Gray, float> m_CornerImage = null;
// inverted thresholded corner strengths (for display)
private Image<Gray, Byte> m_ThresholdImage = null;
现在,一个按钮单击处理程序提示从文件加载图像并显示它:
private void button1_Click(object sender, EventArgs e)
{
// prompt for source image
OpenFileDialog Openfile = new OpenFileDialog();
if (Openfile.ShowDialog() == DialogResult.OK)
{
// create and show source image as grayscale
m_SourceImage = new Image<Gray, byte>(Openfile.FileName);
pictureBox1.Image = m_SourceImage.ToBitmap();
}
}
最后,用于执行角点检测的按钮单击处理程序:
private void button2_Click(object sender, EventArgs e)
{
// create corner strength image and do Harris
m_CornerImage = new Image<Gray, float>(m_SourceImage.Size);
CvInvoke.cvCornerHarris(m_SourceImage, m_CornerImage, 3, 3, 0.01);
// create and show inverted threshold image
m_ThresholdImage = new Image<Gray, Byte>(m_SourceImage.Size);
CvInvoke.cvThreshold(m_CornerImage, m_ThresholdImage, 0.0001,
255.0, Emgu.CV.CvEnum.THRESH.CV_THRESH_BINARY_INV);
pictureBox1.Image = m_ThresholdImage.ToBitmap();
}
在上面的代码中,您可以看到我已经按照书中的示例对角图像应用了阈值并将结果反转以便于显示。你可以只显示m_CornerImage
。
以下是结果的一些屏幕截图 - 左侧是加载的图像(灰度),右侧是显示角强度的倒置阈值图像:
如果您需要任何进一步的信息或帮助,请评论或编辑您的问题,我会尽力而为。