是否有一种快速的解决方案可以仅在我感兴趣的 blob 的轮廓内指定 ROI?
到目前为止我的想法:
- 使用boundingRect,但它包含太多我不想分析的东西。
- 将 goodFeaturesToTrack 应用于整个图像,然后循环输出坐标以消除我的 blobs 轮廓之外的一次
提前致谢!
编辑
我找到了我需要的东西:cv::pointPolygonTest() 似乎是正确的,但我不确定如何实现它......</p>
这是一些代码:
// ...
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);
}
“多边形”包含我需要的轮廓。
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() 检查每个点,对吗?