如何在Emgu CV中将检测到的边缘合并到彩色捕获图像中

6
我正在尝试制作一个C#桌面应用程序(带有Emgu CV包装器),该应用可以捕捉相机的输出、检测输出中的边缘,然后显示原始的彩色和边缘合并后的输出。我已经成功地从相机获取了输出,并使用Canny方法检测出了输出中的边缘。但问题在于虽然原始输出是彩色的,但边缘检测却只能以灰度图像(黑色背景,白色边缘)进行。我想知道如何将彩色输出与边缘输出“合并”以输出一种合并后的输出。
我已经尝试使用Emgu CV中的Copy方法,但它输出的是黑色背景和正确着色的边缘(例如,如果我在相机前面拿着一个红色的立方体,则其周围的边缘将被涂成红色)。
非常感谢任何帮助。
1个回答

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;

    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接