自学内容网 自学内容网

C++:cv::Mat的列数与行数属性

在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 来访问和修改像素值。


原文地址:https://blog.csdn.net/Ethan_Rich/article/details/140259634

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!