如何在OpenCV中比较标量

How to compare scalars in OpenCV

本文关键字:比较 标量 OpenCV      更新时间:2023-10-16

我有一个名为"myClass"的类,它返回"cv::Scalar"类型,我想这样做:

cv::Scalar myValue; 
for ( myValue > myClass (i,j) )
.... 

但是"for"行中的比较部分给出了错误,说"没有运算符>匹配这些操作数"。有人可以帮助我吗?谢谢。

为了完成志璐的回答:

如果你想比较标量的一个元素,你应该做下一步:

cv::Scalar scalar(myValue);   //here you assign a value to the element (0,0)
for (scalar.val[0,0] > myClass (i,j)) // access the elment of Scalar
{
}

无论如何,如果您只想要一个值,那么使用 Scalar 是没有意义的。还要注意,你需要一个合适的 for 循环表达式,例如

for(i = 0; i < 0; i++){}

Scalar 是一个四双精度类型元素数组。您可以在这种结构中存储任意数量的元素(双精度类型)。因此,您不能像 int 类型那样直接将标量的一个实例与另一个实例进行比较。

如果没有运算符来比较两个cv::Scalar元素,则可以定义它:

#include "OpenCVStuff.h"
// Custom operator to compare cv::Scalar class...
bool operator >(const cv::Scalar &a, const cv::Scalar &b)
{
    bool Result = false;
    // Do whatever you think a Scalar comparison must be.
    return Result;
}
int main(int argc, char **argv)
{
    cv::Scalar myValue; 
    // Assuming myClass (i,j) returns a cv::Scalar
    for ( myValue > myClass (i,j) )
    {
        // Do something...
    }
    return 0;
}

这样做,您可以定义两个cv::Scalar的比较方式,而无需打扰cv::Scalar类本身。

我把它放在main.cpp中只是作为一个例子,但只要在执行比较的位置可见,您就可以在任何地方定义运算符。