添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

c++ opencv精确提取圆形标定板,圆心角点坐标,代码示意

69浏览 · 2024-10-12 13:07:12
在OpenCV中,提取圆形标定板并定位其圆心通常涉及使用Hough Circle Transform。这是一个基于概率的方法,用于检测图像中的圆形轮廓。下面是一个简单的C++代码示例,演示如何使用OpenCV库来实现这个功能: ```cpp #include <opencv2/opencv.hpp> #include <opencv2/imgproc.hpp> // 函数声明 std::vector<cv::Vec3f> findCircles(const cv::Mat& img); int main(int argc, char** argv) // 加载图片 cv::Mat src = cv::imread("board_image.jpg", cv::IMREAD_GRAYSCALE); if (src.empty()) std::cout << "Failed to load image" << std::endl; return -1; // 转换到二值图像 cv::threshold(src, src, 50, 255, cv::THRESH_BINARY_INV + cv::THRESH_OTSU); // 使用霍夫圆变换 std::vector<cv::Vec3f> circles = findCircles(src); // 遍历找到的圆形,并打印圆心坐标 for (const auto& circle : circles) int x = circle[0]; int y = circle[1]; float radius = circle[2]; std::cout << "Circle center at (" << x << ", " << y << ") with radius " << radius << std::endl; return 0; // 自定义函数:查找圆形 std::vector<cv::Vec3f> findCircles(const cv::Mat& img) std::vector<cv::Vec3f> circles; cv::HoughCircles(img, circles, cv::HOUGH_GRADIENT, 1, img.rows/8, 200, 100, 0, 0); // 参数调整可能需要实验 // 可能需要对结果进行过滤,比如去除过小或过大、噪声等 circles.erase(std::remove_if(circles.begin(), circles.end(), [](cv::Vec3f &circle) { return std::abs(circle[2] - cvRound(circle[2])) > 5; }), circles.end()); return circles; 这个例子中,我们首先加载并转换成灰度图,然后应用Hough Circle Transform寻找可能的圆。`findCircles`函数返回一个包含三个元素的向量,每个元素代表一个圆的中心位置(x, y)和半径。注意,实际应用中可能需要根据图像质量和特定需求微调Hough变换的参数。