2012-10-03 3 views
3

J'ai une classe appelée « myClass », qui retourne « cv :: Scalar type », et je veux faire:Comment comparer scalaires dans OpenCV

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

Mais la partie de comparaison dans le « pour "ligne donne une erreur, disant" aucun opérateur> correspond à ces opérandes ". Quelqu'un pourrait-il m'aider? Je vous remercie.

+1

Je ne sais pas si cv a quelque chose de proche, mais vous pouvez définir votre propre librement avec la sémantique dont vous avez besoin. – chris

+2

La question est comment comparer deux tuples avec 4 valeurs, et c'est à vous de définir un critère. – Sam

+0

pourriez-vous l'expliquer avec un exemple? –

Répondre

2

S'il n'y a pas d'opérateur pour comparer deux cv::Scalar éléments que vous pouvez définir:

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

Ce faisant, vous pouvez définir la façon dont deux cv::Scalar sont comparé sans déranger la classe cv::Scalar lui-même.

Je l'ai mis dans le main.cpp à titre d'exemple, mais vous pouvez définir l'opérateur où vous voulez tant qu'il est visible où la comparaison est effectuée.

+0

Merci beaucoup! –

5

Scalar est un tableau de quatre éléments de type double. Vous pouvez stocker n'importe quel nombre d'éléments (type double) dans une telle structure. Donc, vous ne pouvez pas comparer une instance de Scalar avec une autre directement comme celle de type int.

6

Afin de compléter la réponse de Zhi Lu:

Si vous voulez comparer un élément de Scalar, vous devez faire ensuite:

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

Quoi qu'il en soit il n'y a pas de point sur l'utilisation Scalar si vous voulez juste une seule valeur. Et notez aussi que vous avez besoin d'une bonne pour l'expression de boucle comme

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

Je pense que vous vouliez dire 'scalar.val [0]'. – misha

+0

Merci pour votre réponse :) –

Questions connexes