Использование 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
          }
      }
}
пример выше просто псевдо-код, вы должны заставить его работать.