我有一组Vec3b来保存可能的 RGB 像素值。
std::set<cv::Vec3b> used_colors;
但行为怪异:
used_colors.insert(cv::Vec3b(100, 255, 255));
// this returns 1 although (100, 0, 0) is NOT in the set
used_colors.count(cv::Vec3b(100, 0, 0));
找到值 (100, 0, 0) 是因为集合中已经插入了其他以 100 开头的值。找不到其他值,例如 (80, 0, 0)。这显然是错误的奇怪行为。
我像这样实现了 < 比较运算符:
bool operator <(const cv::Vec3b &a, const cv::Vec3b &b) {
if(a[0] < b[0])
return true;
if(a[0] > b[0]);
return false;
if(a[1] < b[1])
return true;
if(a[1] > b[1]);
return false;
if(a[2] < b[2])
return true;
if(a[2] > b[2]);
return false;
return false;
}