如何使用openCV按颜色检测对象

时间:2019-03-31 12:59:46

标签: c# opencv

我必须创建一个宏,它应该按颜色在屏幕图片的特定区域上检测对象。此外,如果已检测到对象,则需要继续执行代码。

    Image<Bgr, Byte> imgWindowScreen;
    Image<Gray, Byte> imgWindowScreenProcessed;
    Bitmap bmpScreenshot;
    System.Drawing.Graphics gfxScreenshot;
    Size size = new Size(400, 120);

bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
                           Screen.PrimaryScreen.Bounds.Height,
                           PixelFormat.Format32bppArgb);

gfxScreenshot = Graphics.FromImage(bmpScreenshot);

gfxScreenshot.CopyFromScreen(700, 347, 0, 0, size);

imgWindowScreen = new Image<Bgr, Byte>(bmpScreenshot);

imgWindowScreenProcessed = imgWindowScreen.InRange(new Bgr(3, 25, 82),
                                         new Bgr(50, 98, 200));

我选择了该区域对吗?我有一个左上角,我需要得到这样的东西: enter image description here

如何定义imgWindowScreenProcessed具有搜索颜色的像素?我需要建立以下结构:

if (picture has pixels of searched color) {...}
else {...}

1 个答案:

答案 0 :(得分:1)

Here,您可能会发现HSV阈值化的Python实现。我了解您需要使用另一种语言,但是由于它显示了一个简单的案例,因此您可能会对实现的逻辑有所了解。 Here,您可以找到更深入的C ++实现

获得所需颜色像素为1且其他像素为0的二进制图像后,您可以玩形态学来增强图像here,并获得适当的关注区域。

然后,当您有一个在图像中时,您可能希望查看对象的位置。您可以使用findContours()函数来获取对象的位置。

我通常在Python中使用OpenCV,但希望这也可能有所帮助! :)