如何通过像素坐标识别物体

时间:2020-04-17 11:07:27

标签: c++ machine-learning image-processing image-recognition

我和我的同事们基于英特尔实感3D深度相机[D435]自行进行了斑点检测,现在我们必须将这种检测转变为一种识别。我们需要进行人员计数,因此我想我们必须将像素转换为图像,然后将其与另一幅图像进行比较,如果那大约是70%正确,则返回true。现在,我听说这对于该过程将是一项艰巨的任务,尤其是如果它必须在Raspberry Pi上运行时。我该怎么办?

我们目前正在从深度相机的最高点进行检查,如果该点在1至1.5米之间,它将使用一种方法,该方法将递归遍历其旁边的像素,直到它停止为止。 blobCheck 方法。

class Blob {
public:
    map<Coords, int> blobList;
    int blobIndex;
    int MidPoint[2];
    Mat* imRef;
    Blob(vector<Blob>* list, Mat* imRef_) {
        blobIndex = list->size() + 1;
        imRef = imRef_;
    }

    bool loopCheck(int x, int y) {
        if (blobList.size() == 0)
        {
            return true;
        }
        if (blobList.find(Coords(x, y)) != blobList.end()) {
            return false;
        }
        return true;
    }

    void blobCheck(int x, int y, depth_frame* frame) {
        float distance = frame->get_distance(x, y) + 0.05;
        int step = 5;
        float minHeight = 0.5;
        try {
            if (y - step <= 0 || x - step <= 0 || x >= frame->get_width() - step || y >= frame->get_height() - step || distance <= minHeight) {
                return;
            }

            if (frame->get_distance(x, y - step) < distance) {
                if (loopCheck(x, y - step)) {
                    blobList[Coords(x, y - step)] = 0;
                    blobCheck(x, y - step, frame);
                }
            }
            if (frame->get_distance(x - step, y) < distance) {
                if (loopCheck(x - step, y)) {
                    blobList[Coords(x - step, y)] = 0;
                    blobCheck(x - step, y, frame);
                }
            }
            if (frame->get_distance(x, step + y) < distance) {
                if (loopCheck(x, step + y)) {
                    blobList[Coords(x, step + y)] = 0;
                    blobCheck(x, step + y, frame);
                }
            }
            if (frame->get_distance(x + step, y) < distance) {
                if (loopCheck(x + step, y)) {
                    blobList[Coords(x + step, y)] = 0;
                    blobCheck(x + step, y, frame);
                }
            }
        } catch (Exception) {}
    }
};

现在我们有了一个包含所有像素的地图,该像素将使用以下代码显示斑点:

if (list.size() > 0) {
    for (auto& mapItems : list[0].blobList) {
        circle(*imRef, Point(mapItems.first.x, mapItems.first.y), 1, Scalar(255, 255, 255), 2);
    }
}

您将可以在下图看到示例(不必单击即可,仅当您想查看示例时): Blob Detection

0 个答案:

没有答案