Есть ли быстрое решение для указания ROI только в пределах контуров интересующего меня блоба?
Мои идеи на данный момент:
- Использую boundingRect, но он содержит слишком много вещей, которые я не хочу анализировать.
- Применение goodFeaturesToTrack ко всему изображению, а затем цикл по выходным координатам, чтобы исключить один раз за пределами моего контура капель
Заранее спасибо!
ИЗМЕНИТЬ
Я нашел то, что мне нужно: cv::pointPolygonTest() кажется правильным, но я не уверен, как это реализовать …
Вот код:
// ...
IplImage forground_ipl = result;
IplImage *labelImg = cvCreateImage(forground.size(), IPL_DEPTH_LABEL, 1);
CvBlobs blobs;
bool found = cvb::cvLabel(&forground_ipl, labelImg, blobs);
IplImage *imgOut = cvCreateImage(cvGetSize(&forground_ipl), IPL_DEPTH_8U, 3);
if (found) {
vb::CvBlob *greaterBlob = blobs[cvb::cvGreaterBlob(blobs)];
cvb::cvRenderBlob(labelImg, greaterBlob, &forground_ipl, imgOut);
CvContourPolygon *polygon = cvConvertChainCodesToPolygon(&greaterBlob->contour);
}
"polygon" содержит нужный мне контур.
goodFeaturesToTrack реализован так:
- (std::vector<cv::Point2f>)pointsFromGoodFeaturesToTrack:(cv::Mat &)_image
{
std::vector<cv::Point2f> corners;
cv::goodFeaturesToTrack(_image,corners, 100, 0.01, 10);
return corners;
}
Итак, теперь мне нужно перебрать углы и проверить каждую точку с помощью cv::pointPolygonTest(), верно?