任何人都可以向我解释此OPENCV代码的一部分

Can anyone explain part of this opencv code to me?

本文关键字:OPENCV 代码 一部分 解释 可以向 任何人      更新时间:2023-10-16

原始代码在这里

这是一个用于跟踪手势的OPENCV程序,我试图弄清楚为什么此代码的创建者需要C_lower和C_UPPER数组

发布的代码太多了,我主要想知道这里是否有人在这里使用此代码,然后他比我更好地了解。

我想知道他为什么这样做:

void produceBinaries(MyImage *m) {
    Scalar lowerBound;
    Scalar upperBound;
    for (int i = 0; i<NSAMPLES; i++) {
        normalizeColors(m);
        lowerBound = Scalar(avgColor[i][0] - c_lower[i][0], avgColor[i][1] - c_lower[i][1], avgColor[i][2] - c_lower[i][2]);
        upperBound = Scalar(avgColor[i][0] + c_upper[i][0], avgColor[i][1] + c_upper[i][1], avgColor[i][2] + c_upper[i][2]);
        m->bwList.push_back(Mat(m->srcLR.rows, m->srcLR.cols, CV_8U));
        inRange(m->srcLR, lowerBound, upperBound, m->bwList[i]);
    }
    m->bwList[0].copyTo(m->bw);
    for (int i = 1; i<NSAMPLES; i++) {
        m->bw += m->bwList[i];
    }
    medianBlur(m->bw, m->bw, 7);
}

而不是这个

void produceBinaries(MyImage *m) {
    Scalar lowerBound;
    Scalar upperBound;
    for (int i = 0; i<NSAMPLES; i++) {
        normalizeColors(m);
        lowerBound = Scalar(avgColor[i][0] - 20, avgColor[i][1] - 20, avgColor[i][2] - 20);
        upperBound = Scalar(avgColor[i][0] + 20, avgColor[i][1] + 20, avgColor[i][2] + 20);
        m->bwList.push_back(Mat(m->srcLR.rows, m->srcLR.cols, CV_8U));
        inRange(m->srcLR, lowerBound, upperBound, m->bwList[i]);
    }
    m->bwList[0].copyTo(m->bw);
    for (int i = 1; i<NSAMPLES; i++) {
        m->bw += m->bwList[i];
    }
    medianBlur(m->bw, m->bw, 7);
}

可以在此处找到此代码

为什么他需要C_lower和C_Upper的单独值才能进行色相,饱和度和值?为什么不选择像20这样的任意号码?

如果有人可以提供任何帮助,那么这个人几年就没有发布任何有关此代码的信息,所以我不希望他回复我。

,因为这些界限是由用户在GUI中控制的,而不是在代码中进行硬编码。它们设置为initTrackbars中的初始值,以稍后使用TrackBar(一种滑块)进行控制。