2012-12-15 4 views
1

J'essaie de détecter les pixels dont la valeur est supérieure à cvScalar(200,200,200).Dessin rect sur une image

Et après cela, je veux dessiner un rectangle sur tous ces pixels en utilisant cv::rectangle. Quelqu'un peut-il m'aider à faire cela?

Voir cette figure ci-dessous exactement ce que je veux faire. ! [image]: http://technical-recipes.com/wp-content/uploads/2011/10/glove3.jpg

+1

Je ne comprends pas exactement comment vous voulez placer votre rectangle, comment votre rectangle ressembler si un pixel sur deux a une valeur supérieure à (200.200.200)? –

+1

Ou voulez-vous créer un rectangle entourant tous les points ayant une valeur supérieure à (200,200,200)? –

Répondre

2

Voici comment je résoudre votre problème:

  1. Je trouve tous les pixels nécessaires en utilisant inRange. Après cela, j'ai trouvé tous les contours.
  2. Ensuite, j'ai construit gros contour de tous ces contours.
  3. Enfin, trouvé boundingRect de ce grand contour et dessinez-le.

Voici un code C++:

Mat src = imread("image.jpg"), mask; 

const Scalar minScalar = Scalar(200, 200, 200); 
const Scalar maxScalar = Scalar(255, 255, 255); 

inRange(src, minScalar, maxScalar, mask); 

vector<vector<Point2i> > contours; 

findContours(mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE); 

vector<Point2i> bigContour; 
for (int i=0; i<contours.size(); i++) 
{ 
    for (int j=0; j<contours[i].size(); j++) 
    { 
     bigContour.push_back(contours[i][j]); 
    } 
} 

Rect rect = boundingRect(bigContour); 
rectangle(src, rect, Scalar(255, 0, 255)); 

imshow("Image", src); 
waitKey(); 
+0

merci Astor, mais cela ne fonctionne que pour un cadre, je dois le faire en vidéo, un streaming en direct, même si je thread ce cela ne fonctionnerait pas – Engine

+0

pourquoi ça ne marche pas ??? – ArtemStorozhuk

+0

ça rend juste mon streaming lent et 2. c'est exactement ce que je voulais dire, j'ai ajouté une image à ma question dans laquelle des parties de remorquage de la même couleur sont sélectionnées. merci pour votre aide à nouveau – Engine