我一直在使用opencv-3.2在python上做一个关于计算机视觉的任务。 现在我无法提取特征点的准确位置。 图像就像this。
二进制图像就像 this
我必须知道板中椭圆的准确位置。
我尝试使用cv2.findContours,但我发现很难获得满意的结果。我正在考虑在选择一块可以减少噪音影响的区域后使用cv2.findContours。然而,考虑到照片的数量,这很难实现。 所以我正在寻找一个更好的主意。
答案 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 可能需要针对参考图像过滤轮廓。你可以这样做:
创建两个零像素值的二进制图像,一个是绘制轮廓,另一个是绘制椭圆。
扫描每个轮廓并在二进制图像中绘制,同时将椭圆绘制到其他二进制以获得相应的轮廓。对于这两种情况,请使用 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);`
作为厚度参数。
现在在两个二进制图像之间执行CV_FILLED
并计算结果上的非零像素数。如果结果接近零,则轮廓与椭圆相同,否则不相同。
对每个轮廓重复。
PS。我仍然认为HoughTransform会起作用,但使用哪种方法由你决定。 希望它有所帮助!