2011-10-30 11 views
7

La ROI può essere implementata solo con un rettangolo. Ho comunque un contorno che voglio impostare come ROI. Qualcuno ha un'idea di come farei ad usare un contorno come un ROI piuttosto che un rettangolo?Utilizzo del ROI in OpenCV?

Altrimenti, se non possibile, come posso mettere a fuoco le mie azioni solo in pixel in un contorno specifico?

Grazie

PS: Ci scusiamo per tutte queste domande OpenCV. Semplicemente confuso: $

+0

Hai un refuso nel titolo. Inoltre, la maggior parte delle funzioni OpenCV ha un parametro maschera e agisce solo sulla regione dei loro ingressi dove la maschera ha un valore speciale. Che cosa vuoi veramente fare? –

+1

Desidero utilizzare la proiezione posteriore dell'istogramma su pixel in un contorno predefinito. Quindi, in pratica, dovrei semplicemente creare una maschera in bianco e nero con quel contorno riempito e quindi usarlo come maschera per l'immagine su cui voglio utilizzare la proiezione a proiezione dell'istogramma? – user1017485

+0

se non vuoi ottenere i pixel in un contorno, come suggerito prima di mascherare con contorno (disegnare il contorno - bianco su nero quindi usarlo come maschera sull'immagine originale) è la strada più ovvia da fare. – AruniRC

risposta

7

OpenCV supporta solo ROI rettangolari.

Tuttavia, per elaborare alcuni pixel specifici, è possibile utilizzare alcune funzioni di supporto.

Uno di questi è pointPolygonTest(), che indica che un dato pixel appartiene non a un poligono.

Così si può scrivere qualcosa di simile

for(i=0;i<height;i++) 
{ 
     for(j=0;j<width;j++) 
     { 
      if(pointPolygonTest(Point(i,j),myPolygon)) 
      { 
       // do some processing 
      } 
     } 
} 

Controllare anche questo campione http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test

Un'altra opzione (più veloce) è quella sugested da @ Andeas-haferburg. Fare una maschera dipingendo poligono in una nuova immagine in scala di grigi:

drawPoly() 

(Affinché sfondo è 0, e il poligono è 255), Poi si può passare ad altre funzioni, o utilizzare da soli:

for(i=0;i<height;i++) 
{ 
     for(j=0;j<width;j++) 
     { 
      if(mask[j+w*i])) 
      { 
       // do some processing 
      } 
     } 
} 

L'esempio precedente è solo uno pseudo codice, devi farlo funzionare.

+0

Grazie mille aiuto – user1017485

+0

@ user1017485 hai capito come farlo? Sto avendo un problema simile. – Mzk

+0

@ user1017485 hai capito? Voglio anche sapere come fare questo. – bearzk

Problemi correlati