Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I'm guessing what you want to do is just extract the regions in the the detected contours. Here is a possible solution:</p> <pre><code>using namespace cv; int main(void) { vector&lt;Mat&gt; subregions; // contours_final is as given above in your code for (int i = 0; i &lt; contours_final.size(); i++) { // Get bounding box for contour Rect roi = boundingRect(contours_final[i]); // This is a OpenCV function // Create a mask for each contour to mask out that region from image. Mat mask = Mat::zeros(image.size(), CV_8UC1); drawContours(mask, contours_final, i, Scalar(255), CV_FILLED); // This is a OpenCV function // At this point, mask has value of 255 for pixels within the contour and value of 0 for those not in contour. // Extract region using mask for region Mat contourRegion; Mat imageROI; image.copyTo(imageROI, mask); // 'image' is the image you used to compute the contours. contourRegion = imageROI(roi); // Mat maskROI = mask(roi); // Save this if you want a mask for pixels within the contour in contourRegion. // Store contourRegion. contourRegion is a rectangular image the size of the bounding rect for the contour // BUT only pixels within the contour is visible. All other pixels are set to (0,0,0). subregions.push_back(contourRegion); } return 0; } </code></pre> <p>You might also want to consider saving the individual masks to optionally use as a alpha channel in case you want to save the subregions in a format that supports transparency (e.g. png).</p> <p>NOTE: I'm NOT extracting ALL the pixels in the bounding box for each contour, just those within the contour. Pixels that are not within the contour but in the bounding box are set to 0. The reason is that your Mat object is an array and that makes it rectangular. </p> <p>Lastly, I don't see any reason for you to just save the pixels in the contour in a specially created data structure because you would then need to store the position for each pixel in order to recreate the image. If your concern is saving space, that would not save you much space if at all. Saving the tightest bounding box would suffice. If instead you wish to just analyze the pixels in the contour region, then save a copy of the mask for each contour so that you can use it to check which pixels are within the contour.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload