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.
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? –
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
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