这是一个用于跟踪手势的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这样的任意数字?
如果有人能提供任何有用的帮助,那么这家伙多年来一直没有发布任何有关此代码的信息,所以我不希望他回复我。
答案 0 :(得分:0)
因为这些边界由GUI中的用户控制而不是代码中的硬编码。它们被设置为initTrackbars
中的初始值,以便稍后使用轨迹栏(一种滑块)进行控制。