Pergunta

Eu tenho uma classe chamada "myClass", que retorna o tipo "cv::Scalar", e quero fazer isso:

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

Mas a parte de comparação na linha "for" apresenta erro, dizendo "nenhum operador > corresponde a esses operandos".Alguém poderia me ajudar?Obrigado.

Foi útil?

Solução

Se não houver operador para comparar dois cv::Scalar elementos você pode defini-lo:

#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;
}

Fazendo isso você pode definir o caminho dois cv::Scalar são comparados sem incomodar o cv::Scalar classe em si.

Eu coloquei no main.cpp apenas como exemplo, mas você pode definir o operador onde quiser, desde que esteja visível onde a comparação é realizada.

Outras dicas

Para completar a resposta de Zhi Lu:

Se você quiser comparar um elemento escalar, você deve fazer o seguinte:

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
{
}

De qualquer forma, não faz sentido usar Scalar se você deseja apenas um único valor.E observe também que você precisa de uma expressão de loop for adequada, como

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

Escalar é uma matriz de quatro elementos de tipo duplo.Você pode armazenar qualquer número de elementos (tipo duplo) nessa estrutura.Portanto, você não pode comparar uma instância do Scalar com outra diretamente como a do tipo int.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top