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

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

7 голосов
/ 30 октября 2011

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

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

Спасибо

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

1 Ответ

7 голосов
/ 31 октября 2011

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

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

Одной из них является 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
          }
      }
}

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

...