私はあなたの問題を本当に理解していません-あなたが言うなら:
画像は真っ白な紙の画像で、四隅の模様は黒です。
では、これら4つの輪郭だけを画像からマスクする場合の問題は何でしょうか。長さ40ピクセルの4つの正方形でマスクを行った後、私はこれを手に入れました:
小さな領域を削除するには、モルフォロジー操作を使用できます。私はこれを得た:
そして、入力画像にそれらを描画するだけです(オプション)。結果は次のとおりです。
このアルゴリズムを実装するには、OpenCVライブラリを使用します。私はそれがIOSで動作することを100%確信しています-OpenCVチームはついにIOSバージョンを公開しました。だからあなたが言うなら:
OpenCV-iOSリンクを実行しようとしましたが、プロジェクトが実行されず、エラーが表示されます。
私たちはあなたの問題を見るテレパシストではないので、それであなたを助けることはできません。ほんの小さな提案-あなたの問題をグーグルしてみてください。私はそれが役立つはずだと99%確信しています。
そして私が忘れないように-ここにc++コードがあります:
Mat src = imread("input.png"), tmp;
//convert image to 1bit
cvtColor(src, tmp, CV_BGR2GRAY);
threshold(tmp, tmp, 200, 255, THRESH_OTSU);
//do masking
#define DELTA 40
for (size_t i=0; i<tmp.rows; i++)
{
for (size_t j=0; j<tmp.cols; j++)
{
if(!((i < DELTA && j < DELTA)
|| (i < DELTA && j > tmp.cols - DELTA)
|| (i > tmp.rows - DELTA && j < DELTA)
|| (i > tmp.rows - DELTA && j > tmp.cols - DELTA)))
{
//set color to black
tmp.at<uchar>(i, j) = 255;
}
}
}
bitwise_not(tmp,tmp);
//erosion and dilatation:
Mat element = getStructuringElement(MORPH_RECT, Size(2, 2), Point(1, 1));
erode(tmp, tmp, element);
dilate(tmp, tmp, element);
//(Optional) find contours and draw them:
vector<Vec4i> hierarchy;
vector<vector<Point2i> > contours;
findContours(tmp, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);
for (size_t i=0; i<contours.size(); i++)
{
drawContours(src, contours, i, Scalar(0, 0, 255), 1);
}