OpenCV中数据类型cv::Vec3f

cv::Vec3f 是 OpenCV 提供的一个模板类,用于表示具有三个元素的向量,每个元素都是 float 类型。在图像处理和计算机视觉中,这种类型的向量通常用于表示颜色值(如 BGR 颜色空间中的一个像素点)、坐标点(例如圆的中心),或其他需要三个浮点数的数据。

cv::Vec3f 的使用

1. 表示圆的参数

在使用 cv::HoughCircles 函数检测圆时,cv::Vec3f 通常用来表示检测到的圆的参数:

  • cv::Vec3f 的第一个元素是圆心的 x 坐标。
  • 第二个元素是圆心的 y 坐标。
  • 第三个元素是圆的半径。
cpp 复制代码
std::vector<cv::Vec3f> circles;
cv::HoughCircles(edges, circles, cv::HOUGH_GRADIENT, 1, 20, 50, 30, 10, 100);

for (const auto& circle : circles) {
    cv::Point center(cvRound(circle[0]), cvRound(circle[1]));
    int radius = cvRound(circle[2]);
    // 处理检测到的圆
}
2. 表示颜色值

cv::Vec3f 也可以用来表示图像中的颜色值,尤其是当你需要浮点精度时。例如:

cpp 复制代码
cv::Vec3f color(0.0f, 255.0f, 0.0f); // 绿色(BGR格式)
3. 表示三维坐标

在一些计算机视觉应用中,cv::Vec3f 也可以用来表示三维坐标点:

cpp 复制代码
cv::Vec3f point3D(1.0f, 2.0f, 3.0f);

代码示例

以下是一个完整的 C++ 示例,展示了如何使用 cv::Vec3f 来检测圆并处理相关参数:

cpp 复制代码
#include <opencv2/opencv.hpp>
#include <iostream>

void detectCircles(const cv::Mat& edges) {
    std::vector<cv::Vec3f> circles;
    cv::HoughCircles(edges, circles, cv::HOUGH_GRADIENT, 1, 20, 50, 30, 10, 100);

    for (const auto& circle : circles) {
        // 圆的中心坐标
        cv::Point center(cvRound(circle[0]), cvRound(circle[1]));
        // 圆的半径
        int radius = cvRound(circle[2]);

        std::cout << "Circle detected at (" << center.x << ", " << center.y << ") with radius " << radius << std::endl;

        // 在图像上绘制圆
        cv::Mat img = cv::imread("clock.jpg");
        cv::circle(img, center, radius, cv::Scalar(0, 255, 0), 2); // 绘制圆
        cv::circle(img, center, 3, cv::Scalar(0, 0, 255), -1); // 绘制圆心

        // 显示图像
        cv::imshow("Detected Circles", img);
        cv::waitKey(0);
    }
}

int main() {
    cv::Mat img = cv::imread("clock.jpg");
    if (img.empty()) {
        std::cerr << "Error: Image not found!" << std::endl;
        return -1;
    }

    cv::Mat gray;
    cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
    cv::Mat edges;
    cv::GaussianBlur(gray, gray, cv::Size(5, 5), 0);
    cv::Canny(gray, edges, 50, 150);

    detectCircles(edges);

    return 0;
}

代码解释

  1. 读取图像并转换为灰度图像:

    • cv::imread 读取图像文件。
    • cv::cvtColor 将图像转换为灰度图。
  2. 应用高斯滤波和边缘检测:

    • cv::GaussianBlur 去噪。
    • cv::Canny 边缘检测。
  3. 检测圆并绘制:

    • cv::HoughCircles 检测图像中的圆,返回圆的参数作为 cv::Vec3f 向量。
    • 遍历检测到的圆,使用 cv::circle 在图像上绘制圆和圆心。
  4. 显示图像:

    • 使用 cv::imshow 显示图像,cv::waitKey 等待用户按键。

通过理解和正确使用 cv::Vec3f,您可以在 OpenCV 中高效地处理和管理三维数据或颜色数据。

相关推荐
2601_967987374 小时前
用Python+OpenCV+YOLO写个游戏脚本:从自动瞄准到自动采集的保姆级教程
python·opencv·yolo·目标检测·游戏自动化
Li_RuiQi6 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
迪菲赫尔曼6 小时前
【基础篇 02】文件、文件夹和路径:先把学习资料放对地方
yolo·计算机视觉·论文·教程·ultralyt
zhippt_10149 小时前
图转PPT实测:截图、课件照片如何还原成可编辑幻灯片
opencv·powerpoint
深圳安锐科技有限公司9 小时前
从成像尺度到亚像素解算:变焦视觉位移监测如何让远近断面都稳
图像处理·人工智能·深度学习·算法·计算机视觉·系统架构·结构健康监测
双翌视觉13 小时前
.机器视觉国产化方案梳理:对位算法、AI 检测平台与精密测量仪器技术架构
人工智能·计算机视觉·视觉检测·机器视觉·工业自动化·视觉对位系统·ai 视觉检测
怎么全是重名13 小时前
PatchCore
人工智能·深度学习·计算机视觉·异常检测
W_3260014 小时前
Python 图像处理第二十八章|OpenCV 形态学操作进阶:腐蚀、膨胀、开运算、闭运算、梯度、顶帽黑帽
图像处理·人工智能·python·opencv·计算机视觉
美狐美颜SDK开放平台14 小时前
视频美颜SDK如何实现动态贴纸跟随?人脸追踪技术解析
android·人工智能·计算机视觉·音视频·直播美颜sdk
拜小白14 小时前
【论文解读】PanoRoom:从球面到3D布局
深度学习·计算机视觉·全景图