在OpenCV中,cv::Mat
类是一个非常核心的数据结构,用于存储图像或数值数据。这个类提供了丰富的功能来操作这些数据,包括访问、修改和转换数据等。cv::Mat
类的 cols
和 rows
属性分别代表矩阵(或图像)的列数和行数。
-
cols
:这个属性代表矩阵或图像的列数。对于一个二维矩阵或图像而言,列数是指水平方向上元素的数量。在图像处理中,这通常对应于图像的宽度(width)。 -
rows
:这个属性代表矩阵或图像的行数。同样地,对于一个二维矩阵或图像而言,行数是指垂直方向上元素的数量。在图像处理中,这通常对应于图像的高度(height)。
这两个属性是 cv::Mat
类的一部分,允许你轻松地查询和操作矩阵或图像的尺寸。例如,你可以使用 cv::Mat::rows
和 cv::Mat::cols
成员函数(或者更简单地,直接访问 rows
和 cols
属性,如果它们在你的OpenCV版本中是公开的)来获取图像的尺寸,或者使用这些信息来遍历图像的像素。
示例代码:
#include <opencv2/opencv.hpp>
#include <iostream> int main() { // 创建一个 480x640 的空白色图像 cv::Mat img = cv::Mat::zeros(480, 640, CV_8UC3); // 访问并打印图像的尺寸 std::cout << "图像的行数(高度): " << img.rows << std::endl; std::cout << "图像的列数(宽度): " << img.cols << std::endl; // 遍历图像的每个像素(这里只是示例,实际上并未对像素值进行修改) for (int i = 0; i < img.rows; ++i) { for (int j = 0; j < img.cols; ++j) { // 这里可以访问或修改像素值,但在这个例子中我们只是遍历它们 // 例如:img.at<cv::Vec3b>(i, j) = cv::Vec3b(255, 0, 0); // 将所有像素设置为红色 } } // 显示图像(如果进行了修改的话) // cv::imshow("Image", img); // cv::waitKey(0); return 0;
}
请注意,在上面的示例中,我提到了使用 img.at<cv::Vec3b>(i, j)
来访问和修改像素值。这是因为 img
是一个三通道(彩色)图像,其每个像素都由一个 cv::Vec3b
类型的向量表示,其中包含了该像素的蓝色、绿色和红色分量。对于灰度图像,你会使用 uchar
类型而不是 cv::Vec3b
来访问和修改像素值。