13

可能重复:
了解 openCV 2.4 中的感兴趣区域

我想从图像(Mat 格式)中获取子图像(由下面的红色框包围的图像)。我该怎么做呢?

在此处输入图像描述

这是我到目前为止的进展:

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);
}
4

1 回答 1

29

您可以开始选择轮廓(在您的情况下,是与手相对应的轮廓)。然后,您计算此轮廓的边界矩形。最后,您从中制作一个新的矩阵标题。

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)避免这种情况。

我希望它有所帮助,祝你好运

于 2012-10-17T10:07:13.420 回答