Recognize Black patterns appearing on the four corners of the image ios using opencv or some other technique

僤鯓⒐⒋嵵緔 提交于 2019-11-27 09:09:58
zlajo

Maybe this question is helpful for you, especially the link to the Tennis Ball Recognizing Tutorial seems to be pretty much what you are looking for.

Regarding how to use OpenCV on iOS you might want to take a look at OpenCV-iOS and Computer Vision with iOS.

I really don't understand your problem - if you say:

The image is the image of paper which is pure white and the patterns are in four corners are in black.

Then what's the problem to mask only these four contours from image? After doing mask with 4 squares with length 40 pixels I got this:

To remove small areas you can use morphological operations. I got this:

And just draw them (optional) on input image. Here's result:

To implement this algorithm I use OpenCV library. I'm 100% sure that it works on IOS - OpenCV team finally published IOS version. So if you say:

I tried running the OpenCV-iOS link but the project does not run, it is showing errors.

Then we can't help you with that because we are not telepathists to see your problem. Just small suggestion - try to google your problem. I'm 99% sure that it should help.

And lest I forget - here's c++ code:

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);
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!