Суб-изображение OpenCV с изображения Mat

Возможный дубликат:
Понимание региона интереса к openCV 2.4

Я хочу получить суб-изображение (тот, который ограничен красным полем ниже) из изображения (формат Mat). как это сделать?

enter image description here

вот мой прогресс:

include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace std;
using namespace cv;
int main()
{
    Mat imgray, thresh;
    vector<vector<Point> >contours;
    vector<Point> cnt;
    vector<Vec4i> hierarchy;
    Point leftmost;

    Mat im = imread("igoy1.jpg");
    cvtColor(im, imgray, COLOR_BGR2GRAY);
    threshold(imgray, thresh, 127, 255, 0);
    findContours(thresh, contours, hierarchy, RETR_TREE,CHAIN_APPROX_SIMPLE);
}

Ответ 1

Вы можете начать выбирать контур (в вашем случае - контур, соответствующий руке). Затем вы вычисляете ограничивающий прямоугольник для этого контура. Наконец, вы создаете из него новый заголовок матрицы.

int n=0;// Here you will need to define n differently (for instance pick the largest contour instead of the first one)
cv::Rect rect(contours[n]);
cv::Mat miniMat;
miniMat = imgray(rect);

Предупреждение: В этом случае miniMat является субрегионом imgray. Это означает, что если вы измените первое, вы также измените последнее. Используйте miniMat.copyTo(anotherMat), чтобы избежать этого.

Я надеюсь, что это помогло, Удачи.