你是否有提取特征点位置的好主意

时间:2017-04-05 14:23:59

标签: python opencv

我一直在使用opencv-3.2在python上做一个关于计算机视觉的任务。 现在我无法提取特征点的准确位置。 图像就像this

二进制图像就像 this

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

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

1 个答案:

答案 0 :(得分:0)

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

方法1 SimpleBlobDetector

该探测器经过调整以检测圆形斑点。 C ++代码

SET DATEFORMAT mdy;
select
[STOLOT].USRFLD1_0, *
from
CICPROD.STOLOT
WHERE
ISDATE([STOLOT].USRFLD1_0)= 0 and [STOLOT].USRFLD1_0 is not null

方法2 :由于OP表示轮廓检测。 Reference 可能需要针对参考图像过滤轮廓。你可以这样做:

  1. 创建两个零像素值的二进制图像,一个是绘制轮廓,另一个是绘制椭圆。

  2. 扫描每个轮廓并在二进制图像中绘制,同时将椭圆绘制到其他二进制以获得相应的轮廓。对于这两种情况,请使用 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);` 作为厚度参数。

  3. 现在在两个二进制图像之间执行CV_FILLED并计算结果上的非零像素数。如果结果接近零,则轮廓与椭圆相同,否则不相同。

  4. 对每个轮廓重复。

  5. PS。我仍然认为HoughTransform会起作用,但使用哪种方法由你决定。 希望它有所帮助!