跳转到内容
新建笔记

读取显示

1)cv::glob()

cv::glob 是 OpenCV 库中的一个函数,用于获取指定目录下的所有文件(或满足特定模式的文件)。它的函数签名如下:

void cv::glob(String pattern, std::vector<String>& result, bool recursive = false);

参数说明:

  • pattern:文件模式字符串,可以包含通配符,例如 “images/*.jpg”。
  • result:一个字符串向量,用于存储匹配的文件名。
  • recursive:一个布尔值,指定是否递归搜索子目录。

例如,如果你想获取 “images/” 目录下所有的 “.jpg” 文件,可以这样使用 cv::glob:

std::vector<String> filenames;
cv::glob("images/*.jpg", filenames);

GitHub Copilot: Mat 是 OpenCV 中的一个核心数据结构,用于存储图像或者矩阵。它的全名是 Matrix,即矩阵的意思。Mat 对象不仅可以存储二维图像,还可以存储三维图像和更高维度的数据。

cv::Mat image = cv::Mat::zeros(8400, 38, CV_8UC3); // [h, w]:(8400, 38)
std::cout << image.size()<< std::endl; // [38 x 8400]
属性 / 功能说明示例代码
数据类型存储不同类型的数据Mat A = Mat::zeros(3, 3, CV_32F);
通道数存储多通道数据Mat B = Mat::zeros(3, 3, CV_8UC3);
尺寸存储任意尺寸的数据Mat C = Mat::ones(10, 10, CV_32F);
连续性数据在内存中可能是连续或非连续的Mat D = C.clone(); // D的数据在内存中是连续的
子矩阵表示大矩阵的一部分Mat E = C(Range(0,5), Range(0,5)); // E是C的一个子矩阵
数据共享Mat对象之间可以共享数据Mat F = C; // F和C共享数据
自动内存管理自动管理内存,无引用时自动释放Mat G; // G是一个空矩阵,不占用任何内存
函数操作OpenCV提供的多种矩阵操作函数Mat H = C + 1; // 对C中的每个元素加1
方法/属性示例说明
zerosMat A = Mat::zeros(3, 3, CV_32F);创建一个全零矩阵
onesMat::ones(3, 3, CV_32F);创建一个全一矩阵
eyeMat::eye(3, 3, CV_32F);创建一个单位矩阵
at (访问)float value = A.at<float>(0, 0);访问指定位置的元素
at (修改)A.at<float>(0, 0) = 1.0; 注意顺序是(h, w)修改指定位置的元素
rowsint rows = A.rows;获取矩阵的行数
colsint cols = A.cols;获取矩阵的列数
cloneMat B = A.clone();创建矩阵的副本
RangeMat C = A(Range(0, 2), Range(0, 2));创建子矩阵
convertToA.convertTo(A, CV_32F);转换矩阵的类型
+ - * /Mat D = A + B;矩阵的算术操作
createmat.create(3, 3, CV_32F);创建一个新的矩阵
emptyif (mat.empty()) { cout << "Matrix is empty" << endl; }检查矩阵是否为空
sizeSize s = mat.size(); Size s = mat.size().width; Size s = mat.size().height;获取矩阵的尺寸
typeint t = mat.type();获取矩阵的类型
channelsint c = mat.channels();获取矩阵的通道数
reshapeMat reshaped = mat.reshape(1);改变矩阵的通道数和/或行数
row colMat r = mat.row(0);获取矩阵的指定行或列
tMat transposed = mat.t();转置矩阵
invMat inverse = mat.inv();计算矩阵的逆
mulMat result = mat.mul(mat);执行矩阵的按元素乘法
dot crossdouble dot_product = mat.dot(mat);计算矩阵的点积和叉积
属性描述示例
.data是一个指向数据的指针
方法(成员函数)
size_t cv::Mat::total() constReturns the total number of array elements.(单通道)size_t cv::Mat::total(int startDim, int endDim = INT_MAX )const
convertTo()数组转换为另一种数据类型,可选scalevoid cv::Mat::convertTo(OutputArray m, int rtype, double alpha = 1,double beta = 0) const
m(x,y)=saturatecast<rType>(α(∗this)(x,y)+β)m(x,y)=saturate_cast <rType>(\alpha(*this)(x,y)+\beta)
.ptr()它用于获取指向矩阵特定行或元素的指针。有20个重载template
const _Tp * cv::Mat::ptr(int row, int col) const
cv::Mat img_640 = cv::Mat::zeros(640, 640, CV_8UC3);
src = img_640; // 其中src是(480, 640)
// 显示
std::cout << bbox.data << std::endl; // 显示为空,ptr 不是标准的输入输出格式。
std::cout << bbox << std::endl; // 直接输出,因为Mat 重载了,可以想python显示numpy那样显示出来。