OpenCV solo admite ROI rectangulares.
Sin embargo, para realizar algunos procesos de píxeles específicos, puede utilizar algunas funciones de ayuda.
Uno de ellos es pointPolygonTest(), que le indica que un píxel dado pertenece no a un polígono.
para que pueda escribir algo así como
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
if(pointPolygonTest(Point(i,j),myPolygon))
{
// do some processing
}
}
}
También puedes ver esta muestra http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test
Otra opción (más rápido) es el sugested por @ Andeas-haferburg. Hacer una máscara de pintura de su polígono en una nueva imagen en escala de grises:
drawPoly()
(Para que el fondo es 0, y el polígono es 255), entonces puede pasar a otras funciones, o utilizarlo en solitario:
for(i=0;i<height;i++)
{
for(j=0;j<width;j++)
{
if(mask[j+w*i]))
{
// do some processing
}
}
}
El ejemplo anterior es solo un pseudo código, debe hacerlo funcionar.
Tiene un error tipográfico en el título. Además, la mayoría de las funciones de OpenCV tienen un parámetro de máscara y solo operan en la región de sus entradas donde la máscara tiene un valor especial. ¿Qué es lo que realmente quieres hacer? –
Quiero utilizar la proyección de fondo del histograma en píxeles en un contorno predefinido. Entonces, básicamente, ¿solo crearía una máscara en blanco y negro de ese contorno relleno y luego lo usaría como máscara para la imagen en la que quiero usar la proyección de histograma? – user1017485
si desea obtener píxeles en un contorno, como se sugirió antes de enmascarar con contorno (dibujar el contorno - blanco sobre negro y luego usarlo como una máscara en la imagen original) es el camino obvio a seguir. – AruniRC