当前位置:  开发笔记 > 编程语言 > 正文

检测图像中对象的位置

如何解决《检测图像中对象的位置》经验,为你挑选了1个好方法。

我有一个如下所示的输入图像:

输入图像

请注意,有6个带黑色边框的框.我需要检测每个盒子的位置(左上角).通常我会使用类似模板匹配的东西,但每个框的内容(黑色边框内的彩色区域)是不同的.

是否有可以配置为忽略每个盒子内部区域的模板匹配版本?算法是否更适合这种情况?

还要注意,我必须处理几种不同的分辨率......因此盒子的实际尺寸将因图像而异.也就是说,比率(长度与宽度)将始终相同.

每个请求的真实示例/输入图像:

输入图像



1> Miki..:

您可以这样找到连接组件的边界框.

要查找连接的组件,您可以转换为灰度,并保留所有像素值为0,即矩形的黑色边框.

在此输入图像描述

然后,您可以找到每个连接组件的轮廓,并计算其边界框.这里找到红色边界框:

在此输入图像描述

码:

#include 
#include 
using namespace cv;
using namespace std;

int main()
{
    // Load the image, as BGR
    Mat3b img = imread("path_to_image");

    // Convert to gray scale
    Mat1b gray;
    cvtColor(img, gray, COLOR_BGR2GRAY);

    // Get binary mask
    Mat1b binary = (gray == 0);

    // Find contours of connected components
    vector> contours;
    findContours(binary.clone(), contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);

    // For each contour
    for (int i = 0; i < contours.size(); ++i)
    {
        // Get the bounding box
        Rect box = boundingRect(contours[i]);

        // Draw the box on the original image in red
        rectangle(img, box, Scalar(0, 0, 255), 5);
    }

    // Show result
    imshow("Result", img);
    waitKey();

    return 0;
}

从聊天中发布的图片中,此代码生成:

在此输入图像描述

通常,此代码将正确检测卡以及噪音.您只需根据某些标准消除噪音.其中:盒子的大小或纵横比,盒子内的颜色,一些纹理信息.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有