如何从图像中提取硬币?

问题描述 投票:0回答:1

enter image description here所以我想分割和提取我们的图像硬币并将它们用于其他目的。但是我遇到了首先提取这些硬币的问题。背景不应该一直是白色的。

我已经尝试过阈值并找到轮廓,但它返回的轮廓比预期的要多。我该怎么办?

cv:: Mat coinpic,backgroundpic,diffpic,newpic,threshold;
    cv::cvtColor([self cvMatFromUIImage:coins], coinpic, cv::COLOR_BGR2GRAY);
    cv::threshold(coinpic, diffpic, 200, 255, cv::THRESH_BINARY_INV+cv::THRESH_OTSU);
    vector<vector<cv::Point>>contours;
    vector<cv::Vec4i>hierarchy;
    cv::findContours(diffpic, contours, hierarchy, CV_RETR_TREE, CV_CHAIN_APPROX_SIMPLE);
    cout<<contours.size()<<endl;
    return [self UIImageFromCVMat:diffpic];

我期望的结果如下链接:https://docs.opencv.org/3.4.3/d3/db4/tutorial_py_watershed.html

opencv
1个回答
1
投票

硬币检测是您(很可能)想要将Hough变换用于圆圈的典型示例。它在OpenCV中实现,你可以找到几个例子,例如herehere(这些是在Python中,但你可以找到很多其他的)

你可能会在第一次尝试时得到更多(或不是全部)轮廓,为了解决这个问题,你应该使用param1和param2(参见opencv documentation

© www.soinside.com 2019 - 2024. All rights reserved.