Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Emgu CV的Harris角点_C#_Opencv_Image Processing_Emgucv - Fatal编程技术网

C# 使用Emgu CV的Harris角点

C# 使用Emgu CV的Harris角点,c#,opencv,image-processing,emgucv,C#,Opencv,Image Processing,Emgucv,我尝试使用EGGU CV包装器来使用Harris角,我从一本叫做“开放CV 2,计算机视觉应用程序库克”的书中学习到,书中的例子是基于C++的,下面是他们在替换CV::Harris的例子中用等效于EGU-MVVMAT的例子,但是没有编译,所以我使用了“数据”。字段,它确实编译了,但挂起了,没有错误,没有异常,只是挂起了 MCvMat cornerStrength = new MCvMat(); ; CvInvoke.cvCornerHarris(Global.GrayImage.Ptr, c

我尝试使用EGGU CV包装器来使用Harris角,我从一本叫做“开放CV 2,计算机视觉应用程序库克”的书中学习到,书中的例子是基于C++的,下面是他们在替换CV::Harris的例子中用等效于EGU-MVVMAT的例子,但是没有编译,所以我使用了“数据”。字段,它确实编译了,但挂起了,没有错误,没有异常,只是挂起了

 MCvMat cornerStrength = new MCvMat(); ;
 CvInvoke.cvCornerHarris(Global.GrayImage.Ptr, cornerStrength.data, 3, 3, 0.1);

任何帮助都将不胜感激

是的,我刚刚下载了本书的PDF,安装了Emgu CV,并遵循了与您相同的流程。除非我成功了;-)

我认为您所遗漏的是,在调用
cvCornerHarris
之前,您需要创建一个空的32位浮点图像来接收拐角强度。然后将
图像
对象传递给它

下面是我的代码的主要部分,我使用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;
//原始源图像为灰度
私有映像m_SourceImage=null;
//原始角强度图像(必须是32位浮点)
私有映像m_CornerImage=null;
//反向阈值拐角强度(用于显示)
私有图像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按钮1\u单击(对象发送者,事件参数e)
{
//提示输入源图像
OpenFileDialog Openfile=新建OpenFileDialog();
if(Openfile.ShowDialog()==DialogResult.OK)
{
//创建源图像并将其显示为灰度
m_SourceImage=新图像(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();
}
private void按钮2\u单击(对象发送者,事件参数e)
{
//创建角强度图像并执行以下操作:
m_CornerImage=新图像(m_SourceImage.Size);
CvInvoke.cvCornerHarris(m_SourceImage,m_CornerImage,3,3,0.01);
//创建并显示反转阈值图像
m_ThresholdImage=新图像(m_SourceImage.Size);
CvInvoke.cvThreshold(m_CornerImage,m_ThresholdImage,0.0001,
255.0,Emgu.CV.CvEnum.THRESH.CV\u THRESH\u BINARY\u INV);
pictureBox1.Image=m_ThresholdImage.ToBitmap();
}
在上面的代码中,您可以看到我遵循了书中的示例,对角图像应用了阈值,并反转了结果以便于显示。您可以只显示
m_CornerImage

以下是结果的一些屏幕截图-左侧是加载的图像(灰度),右侧是显示拐角强度的反转阈值图像:


如果您需要任何进一步的信息或帮助,请评论或编辑您的问题,我会尽我所能。

谢谢,我使用的是字节而不是浮点,赏金将在20小时内获得奖励,我会确保这样做it@Musaab-我的荣幸-非常感谢你的赏金,我很期待:-)在最新版本的中找不到Emgucv@ehsanwwe嗯,它在文档中-。