【OpenCV数据结构】

【OpenCV数据结构】

Mat类

数据组成

矩阵头:矩阵尺寸、存储方法、存储地址
存所有像素值的矩阵

※计数机制:
每个Mat有自己的信息头,共享同一矩阵->矩阵指针指向同一地址
Mat A,C;
A=imread(...);
//指向同一区域
Mat B(A);
C=A;
※ROI区域:只引用部分信息的信息头
Mat D(A,Rect(10,10,100,100));//使用矩阵界定
Mat E=A(Range:all(),Range(1,3);//使用行和列界定

复制像素矩阵本身clone()/copyTo()

Mat F=A.clone();
Mat G;
A.copyTo(G);

像素值的存储方法

颜色空间:RGBA(A是透明度alpha)、HSV
HSV:H色调/色相 S饱和度 V亮度
数据类型:char、double等

显式创建Mat对象

Mat既可以作为图像容器类,也可以作为矩阵类

使用Mat()构造函数

#include<bits/stdc++.h>
#include<opencv2/opencv.hpp>
using namespace std;
int main(){
    cv::Mat M(2,2,CV_8UC3,cv::Scalar(0,0,255));
    cout<<"M="<<endl<<" "<<M<<endl;
    return 0;
}

image
指定数据类型和通道数
CV_[位数][带符号与否][类型前缀]C[通道数]

eg CV_8UC3 8位unsigned char型,每个像素由三个元素组成三个通道

利用create()函数

不能给矩阵赋初值
image
image

Matlab初始化方式

image

对于小矩阵:逗号分隔式

cv::Mat_<double>(x,y)<<...
image
image

Mat格式化输出

image
image

Point类:二维坐标系

Point=Point_<int>=Point2i
Point_<float>=Point2f

颜色 Scalar类

BGR+alpha

尺寸 Size类

xxx.width
xxx.height

矩形 Rect类

x,y 左上角
width,height 宽、高
Size()
area() 面积
contains(Point) 判断点是否在矩形内
inside(Point) 矩形是否在该矩形内
tl() 左上角点
br() 右下角点

交集 rect1 & rect2
并集 rect1 | rect2

平移 rect+point
缩放 rect+size

颜色空间转换:cvtColor()

cvtColor(src,dst,int code)

对于通道转换标识符

//转HSV
cv::COLOR_BGR2GRAY
//转GRAY
cv::COLOR_BGR2GRAY
cv::COLOR_GRAY2BGR
posted @ 2025-03-18 20:39  White_ink  阅读(17)  评论(0)    收藏  举报