2
の検出:私が知りたい私は閾値処理画像持つしきい値面積(S)
を、私は「白帯」を検出することができますし、それらの周りに四角形を描画(データの保存もwantedが)
、またはでき私は平行六面体(ポリゴン)を描き、その中の "say"領域が白いですか?
ありがとうございます。
の検出:私が知りたい私は閾値処理画像持つしきい値面積(S)
を、私は「白帯」を検出することができますし、それらの周りに四角形を描画(データの保存もwantedが)
、またはでき私は平行六面体(ポリゴン)を描き、その中の "say"領域が白いですか?
ありがとうございます。
ホワイトゾーンを検出するには、画像の輪郭を取得するだけです。これはで行うことができます。
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));
}
}
contours_polyは何? Mat(...)と同じです。 – ionmike
Mat(...)は、正確に型指定されたparamをboundingRectコンストラクタに渡すことができるように、cv :: Matのインスタンスを構築しています。 また、当初はcontours_polyの初期化を含めていないと悪いです。 approxPolyDPから取得した近似ポリゴンを保持する変数にすぎないので、boundingRectコンストラクタに渡すための行列を作成するのに使用できます。 – bstadt
Alright。私はあなたの例を使ってC#でいくつかのコードを作った。私はあなたの答えを取ると思います。 – ionmike