我真的不明白你的问题 - 如果你说:
图像是纯白色的纸图像,四个角的图案是黑色的。
那么从图像中只屏蔽这四个轮廓有什么问题呢?在用 4 个长度为 40 像素的正方形做蒙版后,我得到了这个:
要删除小区域,您可以使用形态学操作。我懂了:
只需在输入图像上绘制它们(可选)。结果如下:
为了实现这个算法,我使用 OpenCV 库。我 100% 确定它适用于 IOS - 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);
}