2010-05-23 30 views
1

J'essaie de trouver le moyen le plus simple d'ajouter, soustraire une valeur scalaire avec une classe opencv 2.0 cv::Mat.OpenCV multiplier scalaire et une matrice

La plupart des fonctions existantes n'autorisent que les opérations matricielles-matricielles et matricielles-scalaires.

Je suis à la recherche d'opérations matricielles scalaires.

Je le fais actuellement en créant une matrice temporaire avec la même valeur scalaire et en effectuant l'opération arithmétique requise. Exemple ci-dessous ..

Mat M(Size(100,100), CV_8U); 
Mat temp = Mat::ones(100, 100, CV_8U)*255; 
M = temp-M; 

Mais je pense qu'il devrait y avoir de meilleurs moyens/plus facile de le faire.

Des suggestions?

Répondre

0

Peut-être est une caractéristique de 2.1 ou quelque part entre 2,1 et version trunk actuelle, mais cela fonctionne très bien pour moi:

Mat cc = channels[k]; 
    double fmin,fmax; 
    cv::minMaxLoc(cc, &fmin, &fmax); 
    if(fmax > 1.0) 
     fmax = 255.0 ; 
else 
fmax = 1.0; 
cc = (cc/(fmax + 1e-9)); 

canaux vient:

channels = vector<Mat>(3); 
cv::split(img, channels); 

Alors, bien sûr que utiliser une expression scalaire, au moins dans la branche SVN 2.1/actuelle; ce qui se passe si vous essayez le ci-dessus en 2.0?