发布于 2017-04-07 15:15:42
在评论意见之后,有两种可能的办法来实现这一目标:
方法1:SimpleBlobDetector
这个检测器是用来检测圆形气泡的。C++代码
Mat image = imread("image.jpg");
Ptr<FeatureDetector> blobsDetector = FeatureDetector::create("SimpleBlob");
vector<KeyPoint> keypoints;
blobsDetector->detect(image, keypoints);
// Drawing
Mat drawImage = image.clone();
for (size_t i = 0; i < keypoints.size(); ++i){
circle(drawImage, keypoints[i].pt, 4, Scalar(255, 0, 255), -1); }
imwrite("result.png", drawImage);`方法2:正如OP所说的轮廓检测。https://github.com/opencv/opencv_attic/blob/master/opencv/samples/cpp/fitellipse.cpp的等高线可能需要对参考图像进行过滤。你可以这样做:
CV_FILLED作为厚度参数。bitwise_xor,并计算结果上的非零像素数。如果结果接近于零,则等高线与椭圆相同,否则不会。PS。我仍然认为HoughTransform是可行的,但是使用哪种方法由您来决定。希望能帮上忙!
https://stackoverflow.com/questions/43233997
复制相似问题