1

たとえばよりも高い値を持つピクセルを検出しようとしていますcvScalar(200,200,200)

その後、を使用してそれらすべてのピクセルに長方形を描きたいと思いcv::rectangleます。誰かが私にこれを行う方法を手伝ってもらえますか?

下の図を参照して、私がやりたいことを正確に確認してください。![画像]:http ://technical-recipes.com/wp-content/uploads/2011/10/glove3.jpg

4

1 に答える 1

2

問題を解決する方法は次のとおりです。

  1. を使用して、必要なすべてのピクセルを見つけましinRangeた。
  2. この後、すべての輪郭を見つけました。
  3. 次に、これらすべての輪郭から大きな輪郭を作成しました。
  4. 最後に、boundingRectこの大きな輪郭を見つけて描きます。

C++ コードは次のとおりです。

Mat src = imread("image.jpg"), mask;

const Scalar minScalar = Scalar(200, 200, 200);
const Scalar maxScalar = Scalar(255, 255, 255);

inRange(src, minScalar, maxScalar, mask);

vector<vector<Point2i> > contours;

findContours(mask, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);

vector<Point2i> bigContour;
for (int i=0; i<contours.size(); i++)
{
    for (int j=0; j<contours[i].size(); j++)
    {
        bigContour.push_back(contours[i][j]);
    }
}

Rect rect = boundingRect(bigContour);
rectangle(src, rect, Scalar(255, 0, 255));

imshow("Image", src);
waitKey();
于 2012-12-15T22:57:02.170 に答える