python - 提取特征点位置有什么好办法吗

标签 python opencv

我一直在使用 opencv-3.2 在 python 上做一个关于计算机视觉的作业。 现在我很难提取特征点的准确位置。 图像类似于this .

二进制图像就像 this .

我必须知道椭圆在盘子中的准确位置。

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

最佳答案

根据评论,有两种可能的方法可以实现这一点:

方法 1:SimpleBlobDetector

这个检测器被调整来检测圆形 Blob 。 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 所说的轮廓检测。 Reference 可能需要为引用图像过滤轮廓。你可以这样做:

  1. 创建两张零像素值的二值图,一张画等高线,一张画椭圆。

  2. 扫描每个轮廓并绘制在二值图像中,同时将椭圆绘制到其他二值中以得到相应的轮廓。对于这两种情况,使用 CV_FILLED 作为厚度参数。

  3. 现在在两个二值图像之间执行bitwise_xor 并计算结果中非零像素的数量。如果结果接近于零,则轮廓与椭圆相同,否则不是。

  4. 对每个轮廓重复。

附言。我仍然认为 HoughTransform 可以工作,但使用哪种方法由您决定。 希望对您有所帮助!

关于python - 提取特征点位置有什么好办法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43233997/

相关文章:

image - 如何在C++中加载24位Tiff图像

c# - 将 OpenCV Mat 转换为 Texture2D?

python - 如何从 Python 调用 Windows .exe 文件、输入参数并获取文件输出?

Python:如何使用自定义策略 cloudfront 生成签名 URL

opencv - 哪种训练图像的方法更好

python - 选择具有边界规则的感兴趣区域

opencv - 如何在 Windows 中使用 OpenCV 2.3 设置 Eclipse CDT 8?

python - 元素不可见异常 : Selenium Python

python - 如何在Python中获取除第一个单词之外的所有字符串

python - Pandas 在多级数据帧上 applymap