如何将检测到的边合并到Emgu CV中的颜色捕获

时间:2010-03-07 13:34:58

标签: c# opencv webcam computer-vision emgucv

我正在尝试制作一个C#桌面应用程序(使用Emgu CV包装器),它捕获来自摄像头的进纸,检测进纸中的边缘,然后显示带边缘的原始进纸(彩色) - 因此有点像彩色组合饲料和边缘。我成功地从相机中获取了进纸。我还使用Canny方法检测Feed中的边缘。问题是,虽然原始进纸是彩色的,但边缘的检测是以灰度(黑色背景,白色边缘)完成的。我想知道如何将颜色Feed与边缘Feed“合并”以输出合并的Feed。

我已尝试使用Emgu CV中的Copy方法,但它会输出黑色背景和正确着色的边缘(例如,如果我在相机前面放置一个红色立方体,则立方体周围的边缘会显示为红色)。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:6)

好的,经过一点点的修补我找到了解决方案。诀窍是在反转的Canny结果和颜色提要上使用And函数。这是我的函数与Application.Idle一起使用:

    private void processFunction(object sender, EventArgs e) {
        Image<Bgr, Byte> frame = c0.QueryFrame();
        Image<Gray, Byte> grayscale = frame.Convert<Gray, Byte>();
        grayscale = grayscale.Canny(new Gray(0), new Gray(255)).Not(); //invert with Not()
        frame = frame.And(grayscale.Convert<Bgr, Byte>(), grayscale); //And function in action
        imageBox1.Image = frame;

    }