opencv - 如何从图像中提取硬币?

标签 opencv

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中实现,您可以找到几个示例,例如herehere(它们在Python中,但是您可以找到许多其他示例)

初次尝试时,您可能会得到更多(或不是全部)轮廓,要解决此问题,您应该使用param1和param2(请参见opencv documentation)

关于opencv - 如何从图像中提取硬币?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55446113/

相关文章:

python - 为什么在更改Sobel运算符的ddepth参数时输出图像有显着差异?

c++ - 在 eclipse 上使用 opencv 3.0 时出现链接错误

c++ - 霍夫圆,以及一个过于复杂的解决方案

opencv - 试图理解仿射变换

opencv - OpenCV 中相机标定期间出错

opencv - OpenCV制作错误

c++ - 根据点之间的距离排序?

opencv - 使用立体相机的距离结果不佳

c++ - Opencv ROI 比它应该填充的更多

java - OpenCV - 如何在 Android 中设置全屏相机 View ?