2011-12-22 6 views
0

の内側にのみ私はinteresetedてるブロブの輪郭の中にROIを指定するための簡単な解決策はありますか?OpenCVのC++/OBJの-C:goodFeaturesToTrack特定のブロブ

私のアイデア、これまで:boundingRectを使用して

  1. が、それは私が分析するようにしたくない、あまりにも多くのものが含まれています。
  2. 出力によって画像全体にgoodFeaturesToTrackを適用して、ループ事前に一度私のブロブ輪郭の外側

感謝を排除するために調整!私は私が必要なものを見つけ

EDIT

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

"ポリゴンは、" 私は必要な輪郭が含まれています。

goodFeaturesToTrackがこのように実装されています

- (std::vector<cv::Point2f>)pointsFromGoodFeaturesToTrack:(cv::Mat &)_image 
{ 
    std::vector<cv::Point2f> corners; 
    cv::goodFeaturesToTrack(_image,corners, 100, 0.01, 10); 
    return corners; 
} 

私はコーナーをループする必要があると品種との各点をご確認くださいので、次の:: pointPolygonTest()、右?

+0

あなたが望むものの簡単な例を描くことができますか? – mevatron

+0

@mevatron私は今、私は私が興味カートンの角を取得するには、入力画像上goodFeaturesToTrackを発射、あなたの助けとcvBlobでカートン(他のスレッド)の輪郭を得ました。次のステップは、取得のみにコーナーをフィルタリングしています一度カートンの輪郭の内側にある。私は何をしたいのかと思っています。 – dom

答えて

3

あなたの関心領域の上にマスクを作成することができます。

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の中にいくつかのバグについて聞いてきた、と私はそれはこの1つのことだかどうかわからないです。

// 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) 

また、これはあなたのaplicationの速度を向上させる - goodFeaturesToTrackは、時間のホーヘ量を食べて、あなただけの小さな画像の上にそれを適用した場合、全体のゲインが重要です。

+0

ありがとうございました!しかし、私はCvContourPolygonをOpenCVに変換する方法を知らないInputArray ... – dom

+0

ちょうどそれをきれいな画像にプロットする - 上記の編集を確認する – Sam

関連する問題