興味のあるブロブの輪郭内でのみROIを指定する簡単な解決策はありますか?
これまでの私の考え:
- boundingRectを使用していますが、分析したくないものが多すぎます。
- goodFeaturesToTrackを画像全体に適用してから、出力座標をループして、ブロブの輪郭の外側にあるものを削除します
前もって感謝します!
編集
必要なものが見つかりました: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()で各ポイントをチェックする必要があります。