gpt4 book ai didi

c++ - 使用轮廓或任何其他技术最适合二值图像的圆

转载 作者:太空宇宙 更新时间:2023-11-03 23:12:48 24 4
gpt4 key购买 nike

我有一个从某些算法计算出的二值图像。图像中有一个洞,我想在这个洞中最好地拟合一个圆圈。我尝试使用 bestminEnclosingCircle 函数,但它没有给出最佳结果。

这是二值图像

enter image description here

这是我从这个函数中得到的结果

enter image description here

这是预期的

enter image description here

我想排除这部分

enter image description here

这是我寻找轮廓的代码

    vector<Vec4i> hierarchy;
vector<vector<Point> > contours;


findContours(src, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE, Point(0, 0));

最佳答案

检查下面的代码

enter image description here

#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>

using namespace cv;
using namespace std;


int main(int, char** argv)
{
Mat src, src_gray;

/// Load source image and convert it to gray
src = imread("e:/test/ifFz9.png");
resize(src, src, Size(), 0.25, 0.25);

/// Convert image to gray and blur it
cvtColor(src, src_gray, COLOR_BGR2GRAY);
blur(src_gray, src_gray, Size(3, 3));

imshow("Source", src);

Mat threshold_output;
vector<vector<Point> > contours;

/// Detect edges using Threshold
threshold(src_gray, threshold_output, 127, 255, THRESH_BINARY);
/// Find contours
findContours(threshold_output, contours, RETR_TREE, CHAIN_APPROX_SIMPLE);

for (size_t i = 0; i < contours.size(); i++)
{
if (contours[i].size() > 50)
{
RotatedRect minEllipse = fitEllipse(contours[i]);

int size = min(minEllipse.size.width, minEllipse.size.height) / 2;
// ellipse
if (size < src.rows / 2)
ellipse(src, minEllipse.center, Size(size, size), 0, 360, 0, Scalar(0, 0, 0255), 2, 8);
}
}

imshow("Contours", src);
waitKey(0);

return 0;
}

关于c++ - 使用轮廓或任何其他技术最适合二值图像的圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46206466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com