2016-05-07 4 views
2

の検出:私が知りたい私は閾値処理画像持つしきい値面積(S)

を、私は「白帯」を検出することができますし、それらの周りに四角形を描画(データの保存もwantedが)
、またはでき私は平行六面体(ポリゴン)を描き、その中の "say"領域が白いですか?
ありがとうございます。

答えて

2

ホワイトゾーンを検出するには、画像の輪郭を取得するだけです。これはで行うことができます。

vector<vector<Point>>contours; 
vector<Vec4i> hierarchy; 
findContours(blackWhiteImage, 
    contours, 
    hierarchy, 
    CV_RETR_TREE, 
    CV_CHAIN_APPROX_SIMPLE, 
    Point(0,0)); 

その後、あなたはで抽出し、すべての輪郭モデルおおよそのバウンディングボックスを生成することができます。これが完了すると

vector<vector<Point> > contours_poly(contours.size()); 
vector<Rect> boundRect(contours.size()); 
for(int i = 0; i < contours.size(); i++){ 
    approxPolyDP(Mat(contours[i]), 
     contours_poly[i], 
     3, 
     true); 
     //3 is epsilon tuning param for bias-variance trade off 
     //true denotes contours are closed 

    boundRect[i] = boundingRect(Mat(contours_poly[i])); 
} 

は、あなたがあなたにboundingRectオブジェクトにアクセスすることができますが他の配列にアクセスするのと同じように、boundingRect配列を返します。近似なしEmguCVため

まねコード(C#の):

VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint(); 
Mat hierarchy; 

CvInvoke.FindContours(binMat, contours, hierarchy, RetrType.External, ChainApproxMethod.ChainApproxSimple); 

for (int i = 0; i < contours.Size; ++i) 
{ 
    if (CvInvoke.ContourArea(contours[i]) > 8) 
    { 
     Rectangle rc = CvInvoke.BoundingRectangle(contours[i]); 
     CvInvoke.Rectangle(srcMat, rc, new MCvScalar(0, 0, 255)); 
    } 
} 
+0

contours_polyは何? Mat(...)と同じです。 – ionmike

+0

Mat(...)は、正確に型指定されたparamをboundingRectコンストラクタに渡すことができるように、cv :: Matのインスタンスを構築しています。 また、当初はcontours_polyの初期化を含めていないと悪いです。 approxPolyDPから取得した近似ポリゴンを保持する変数にすぎないので、boundingRectコンストラクタに渡すための行列を作成するのに使用できます。 – bstadt

+0

Alright。私はあなたの例を使ってC#でいくつかのコードを作った。私はあなたの答えを取ると思います。 – ionmike

関連する問題