首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你对提取特征点的位置有什么好主意吗?

你对提取特征点的位置有什么好主意吗?
EN

Stack Overflow用户
提问于 2017-04-05 14:23:58
回答 1查看 98关注 0票数 1

我一直在用OpenCV3.2做一项关于python计算机视觉的作业。现在我很难提取出特征点的准确位置。图像就像

二值图像就像

我必须知道椭圆在板块中的准确位置。

我试着使用cv2.findContos,但我发现很难获得令人满意的结果。我正在考虑使用cv2。在选择一片可以减少噪音影响的区域后,使用cv2.findContours。然而,考虑到图片的数量,这是很难实现的。所以我想找个更好的主意。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-07 15:15:42

在评论意见之后,有两种可能的办法来实现这一目标:

方法1:SimpleBlobDetector

这个检测器是用来检测圆形气泡的。C++代码

代码语言:javascript
复制
 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的等高线可能需要对参考图像进行过滤。你可以这样做:

  1. 创建两个零像素值的二进制图像,一个用于绘制等高线,另一个用于绘制椭圆。
  2. 扫描每个轮廓,并在二值图像中绘制它,同时将椭圆绘制到其他二进制位对应的轮廓。对于这两种情况,都使用CV_FILLED作为厚度参数。
  3. 现在,在两个二进制图像之间执行bitwise_xor,并计算结果上的非零像素数。如果结果接近于零,则等高线与椭圆相同,否则不会。
  4. 对每个轮廓重复。

PS。我仍然认为HoughTransform是可行的,但是使用哪种方法由您来决定。希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43233997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档