Использование ROI в OpenCV?

ROI может быть реализован только с прямоугольником. Однако у меня есть контур, который я хочу установить как ROI. Кто-нибудь имеет представление о том, как я буду использовать контур в качестве ROI, а не прямоугольника?

в противном случае, если это невозможно, как я могу фокусировать свои действия только в пикселях в определенном контуре?

спасибо

PS: извините за все эти вопросы OpenCV. Просто очень запутался:$

1 ответов


OpenCV поддерживает только прямоугольные ROIs.

однако, чтобы сделать некоторую обработку для определенных пикселей, вы можете использовать некоторые вспомогательные функции.

один из них-pointPolygonTest(), который говорит вам, что данный пиксель принадлежит не полигону.

Так вы можете написать что-то вроде

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

также проверьте это образец http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test

другой (более быстрый) вариант-это тот, который подслащен @andeas-haferburg. Сделайте маску, нарисовав свой многоугольник в новом изображении оттенков серого:

drawPoly() 

(Так что фон равен 0, а многоугольник равен 255), то вы можете перейти к некоторым другим функциям или использовать его самостоятельно:

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

пример выше просто псевдо-код, вы должны заставить его работать.