Вы можете создать маску для интересующего вас региона:
EDIT
Как сделать маску:
Сделать маску;
Mat mask(origImg.size(), CV_8UC1);
mask.setTo(Scalar::all(0));
// here I assume your contour is extracted with findContours,
// and is stored in a vector<vector<Point>>
// and that you know which contour is the blob
// if it's not the case, use fillPoly instead of drawContour();
Scalar color(255,255,255); // white. actually, it's monchannel.
drawContours(mask, contours, contourIdx, color );
// fillPoly(Mat& img, const Point** pts, const int* npts,
// int ncontours, const Scalar& color)
И теперь вы готовы его использовать. НО , внимательно посмотрите на результат - я слышал о некоторых ошибках в OpenCV, связанных с параметром маски для экстракторов объектов, и я не уверен, что он об этом.
// note the mask parameter:
void goodFeaturesToTrack(InputArray image, OutputArray corners, int maxCorners,
double qualityLevel, double minDistance,
InputArray mask=noArray(), int blockSize=3,
bool useHarrisDetector=false, double k=0.04 )
Это также улучшит скорость вашего приложения - goodFeaturesToTrack потребляет огромное количество времени, и если вы примените его только к небольшому изображению, общий выигрыш будет значительным.