7

私は、紙の4つの黒い四角を検出し、それらを使用して紙を独自の画像で分離するための最良の方法を見つけようとしています。

ここに画像の説明を入力してください

4

1 に答える 1

9

あなたの画像には黒い四角が4つしかないようですので、あなたがしなければならないことは次のとおりです。

  1. 画像を灰色に変換する
  2. しきい値を実行します
  3. 黒い輪郭を見つける(OpenCVでこれを行う前に、画像を反転する必要があります。デフォルトでは、OpenCVは白い輪郭を見つけるからです)
  4. これらの輪郭を循環して、境界の長方形を見つけます。
  5. チェックを行います:

    A)長方形の面積は、一定の定数よりも大きくなっています(私のソリューションでは100でした)

    B)長方形の幅/高さは1.0に近い(私の魂では[ 0.9、1.1 ]の範囲でした)

コード:

Mat img = imread("test.jpg"), gray;
vector<Vec4i> hierarchy;
vector<vector<Point2i> > contours;
cvtColor(img, gray, CV_BGR2GRAY);
threshold(gray, gray, 100, 255, THRESH_BINARY);
bitwise_not(gray, gray);

findContours(gray, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

for(size_t i=0; i<contours.size(); i++)
{
    Rect rect = boundingRect(contours[i]);
    double k = (rect.height+0.0)/rect.width;
    if (0.9<k && k<1.1 && rect.area()>100)
    {
        drawContours(img, contours, i, Scalar(0,0,255));
    }
}

imshow("result", img);
waitKey();

結果: ここに画像の説明を入力してください

このSOの説明も読んでください。紙を検出するのに4つの正方形は必要ありません。

于 2012-07-18T07:10:43.653 に答える