首页 > 其他分享 >OpenCV(cv::Point、cv::Rect、cv::Mat)

OpenCV(cv::Point、cv::Rect、cv::Mat)

时间:2024-08-28 13:36:24浏览次数:6  
标签:10 Mat Point 矩阵 OpenCV 矩形 cv

目录



在OpenCV中,cv::Pointcv::Rectcv::Mat 是三个非常常用的类,分别用于表示点、矩形和图像/矩阵数据。下面是它们的详细介绍:

1. cv::Point

cv::Point 类用于表示二维空间中的一个点,有两个常用的类型:

  • cv::Point: 用于存储整型的点坐标 (x, y)
  • cv::Point_<T>: 模板类,允许使用其他数据类型(如 floatdouble)。

1.1 主要属性:

  • x: 点的 x 坐标。
  • y: 点的 y 坐标。

1.2 示例:

cv::Point p1(10, 20);  // 创建一个点 (10, 20)
cv::Point2f p2(10.5f, 20.5f);  // 创建一个浮点类型的点

1.3 用途:

cv::Point 常用于表示图像中的坐标位置,如像素位置、直线的端点、形状的顶点等。



2. cv::Rect

cv::Rect 类用于表示矩形,通过其左上角的点和尺寸来定义矩形。常用于表示图像中的一个区域(ROI, Region of Interest)。

2.1 主要属性:

  • x: 矩形左上角的 x 坐标。
  • y: 矩形左上角的 y 坐标。
  • width: 矩形的宽度。
  • height: 矩形的高度。

2.2 主要方法:

  • contains(const cv::Point& pt): 判断点是否在矩形内部。
  • area(): 计算矩形的面积。
  • tl(): 返回矩形的左上角坐标。
  • br(): 返回矩形的右下角坐标。

2.3 示例:

cv::Rect r1(10, 10, 50, 50);  // 创建一个矩形,左上角为 (10, 10),宽度为 50,高度为 50
cv::Point p(15, 15);
if (r1.contains(p)) {
    std::cout << "Point is inside the rectangle!" << std::endl;
}

2.4 用途:

  • 在图像处理中用于定义感兴趣区域(ROI),比如裁剪图像、绘制矩形、检测到的物体边界框等。


3. cv::Mat

cv::Mat 类是 OpenCV 中最基础和核心的数据结构之一,用于存储图像和矩阵数据。它可以存储不同类型的数据(如 8 位无符号整型、浮点型等)和多维数组(如灰度图、彩色图、三维数据等)。

3.1 主要属性:

  • rows: 矩阵的行数(图像的高度)。
  • cols: 矩阵的列数(图像的宽度)。
  • data: 指向矩阵数据的指针。
  • type(): 返回矩阵元素的数据类型(如 CV_8UC1, CV_32FC3 等)。

3.2 主要方法:

  • at<T>(int y, int x): 访问矩阵中 (x, y) 位置的元素。
  • clone(): 深拷贝矩阵。
  • copyTo(): 将当前矩阵的内容拷贝到另一个矩阵。
  • zeros(), ones(): 创建全零矩阵或全一矩阵。
  • reshape(): 改变矩阵的维度。
  • convertTo(): 转换矩阵的数据类型。

3.3 示例:

cv::Mat img = cv::imread("image.jpg");  // 读取图像文件
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);  // 转换为灰度图像
int pixelValue = gray.at<uchar>(10, 10);  // 访问 (10, 10) 处的像素值

3.4 用途:

  • cv::Mat 是所有图像处理操作的基础,可以用于存储图像、视频帧、点云、核矩阵等各种数据。
  • 它支持各种类型的数据操作,如像素级别的操作、过滤、变换、特征提取等。


4. 总结

  • cv::Point: 表示二维空间中的点,用于表示像素位置、形状顶点等。
  • cv::Rect: 表示矩形区域,通常用于定义图像中的兴趣区域或检测到的物体边界。
  • cv::Mat: OpenCV 中最核心的数据结构,用于存储图像、矩阵、视频帧等多维数组数据。

它们共同构成了 OpenCV 中大部分图像处理任务的基础,彼此之间可以协同工作。例如,使用 cv::Rect 定义的 ROI 可以用来从 cv::Mat 图像中裁剪子区域,cv::Point 可以指定 ROI 的顶点位置等。



标签:10,Mat,Point,矩阵,OpenCV,矩形,cv
From: https://www.cnblogs.com/keye/p/18384494

相关文章

  • SciTech-Mathmatics-Probability+Statistics: Understanding the $\large Null\ and
    NullHypothesisforLinearRegressionLinearregressionisatechniquewecanusetounderstandtherelationshipbetweenoneormorepredictorvariablesandaresponsevariable.SimpleLinearRegressionIfweonlyhaveonepredictorvariableandonerespo......
  • OpenCV(cv::calcHist())
    目录1.函数定义2.示例3.功能说明4.典型应用cv::calcHist()是OpenCV中用于计算图像或图像集合的直方图的函数。直方图是一个图像的像素值的分布统计,它表示图像中每个像素强度值的频率。1.函数定义cv::calcHist(constMat*images,intnimages,constint*channels,......
  • OpenCV 图像矫正技术深入探讨
    刚进入实验室导师就交给我一个任务,就是让我设计算法给图像进行矫正。哎呀,我不太会图像这块啊,不过还是接下来了,硬着头皮开干吧!那什么是图像的矫正呢?举个例子就好明白了。我的好朋友小明给我拍了这几张照片,因为他的拍照技术不咋地,照片都拍得歪歪扭扭的,比如下面这些照片:人民......
  • OpenCV Mat和IplImage访问像素的方法总结
    在opencv的编程中,遍历访问图像元素是经常遇到的操作,掌握其方法非常重要,无论是Mat类的像素访问,还是IplImage结构体的访问的方法,都必须扎实掌握,毕竟,图像处理本质上就是对像素的各种操作,访问元素就是各种图像处理算法的第一步。首先先看看图像的是怎么存储的。单通道图像多......
  • Day09_0.1基础学习MATLAB学习小技巧总结(9)——数组运算
    利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。素材来源“数学建模清风”特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移步......
  • Day07_0.1基础学习MATLAB学习小技巧总结(7)——矩阵算数运算
    利用暑假的时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。素材来源“数学建模清风”特此说明:本博客的内容只在于总结在使用matlab中的一些小技巧,并非教程,若想系统的学习MATLAB,也可以移......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    CSEC:香港城市大学提出SOTA曝光矫正算法|CVPR2024 在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠......
  • SciTech-Mathmatics-Probability+Statistics: How to Read and Interpret a Regressio
    HowtoReadandInterpretaRegressionTableBYZACHBOBBITTPOSTEDONMARCH20,2019https://www.statology.org/read-interpret-regression-table/Instatistics,regressionisatechniquethatcanbeusedtoanalyzetherelationshipbetweenpredictorvariabl......
  • CSEC:香港城市大学提出SOTA曝光矫正算法 | CVPR 2024
    在光照条件不佳下捕获的图像可能同时包含过曝和欠曝。目前的方法主要集中在调整图像亮度上,这可能会加剧欠曝区域的色调失真,并且无法恢复过曝区域的准确颜色。论文提出通过学习估计和校正这种色调偏移,来增强既有过曝又有欠曝的图像。先通过基于UNet的网络推导输入图像的增亮和变暗......
  • FlexAttention:解决二次复杂度问题,将大型视觉语言模型的输入提升至1008 | ECCV 2024
    \({\ttFlexAttention}\)是一种旨在增强大型视觉语言模型的方法,通过利用动态高分辨率特征选择和分层自注意机制,使其能够有效地处理并从高分辨率图像输入中获得优势,\({\ttFlexAttention}\)在性能和效率方面超越了现有的高分辨率方法。来源:晓飞的算法工程笔记公众号论文:F......