Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
415 views
in Technique[技术] by (71.8m points)

c++ - Using ROI in OpenCV?

ROI can only be implemented with an rectangle. I however have a contour that I want to set as an ROI. Does anyone have an idea of how I would go about using a contour as an ROI rather than a rectangle?

Otherwise if not possible, how could I focus my actions only in pixels in a specific contour?

Thanks

PS: Sorry for all these OpenCV questions. Just really confused :$

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

OpenCV supports only rectangular ROIs.

However, to make some processing for specific pixels, you can use some helper functions.

One of them is pointPolygonTest(), which tells you a given pixel belongs on not to a polygon.

So you can write something like

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

Also check this sample http://opencv.itseez.com/doc/tutorials/imgproc/shapedescriptors/point_polygon_test/point_polygon_test.html#point-polygon-test

Another (faster) option is the one sugested by @andeas-haferburg. Make a mask by painting your polygon in a new grayscale image:

drawPoly() 

(So that background is 0, and the polygon is 255), Then you can pass to some other functions, or use it by yourself:

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

The example above is just pseudo code, you have to make it work.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...