1. 使用C++ opencv读取一张图片
    如下操作:
 cv::Mat m4 = cv::imread("/home/juchunyu/20231013/globalPlanner/PM.pgm",cv::IMREAD_GRAYSCALE); std::cout << "图像宽为:" << m4.cols << "\t高度为:" << m4.rows << "\t通道数为:" << m4.channels() << std::endl;

其中m4是一个矩阵,读取的图片就存在这个地方。
(1)m4.cols表示m4矩阵的列数,对应图片像素的宽度。
(2)m4.rows表示m4矩阵的行数,对应图片像素的高度。

  1. 使用C++ open cv 对矩阵赋值
 cv::Mat map_info_temp(global_cost_map_->getSizeInCellsY(), global_cost_map_->getSizeInCellsX(), CV_8UC1);//initlize //for(int i = (global_cost_map_->getSizeInCellsX())*(global_cost_map_->getSizeInCellsY()) - 1; i > 0; i--)for(int i = 0;i < (global_cost_map_->getSizeInCellsX())*(global_cost_map_->getSizeInCellsY());i++){int x = i % global_cost_map_->getSizeInCellsX();//还原为像素坐标int y = i / global_cost_map_->getSizeInCellsX();//还原为像素坐标//unsigned char value = 255;map_info_temp.at<unsigned char>(y, x) = 254 - costs_[i];//cout<<endl;}

其中map_info_temp.at(y, x)为对像素赋值语句,其中:
(1)y表示图像的高度,矩阵的行数。
(2)x表示图像的宽度,矩阵的列数。

unsigned char &cv::Mat::at<unsigned char>(int i0, int i1)上述代码中的i0和i1代表图像宽度还是高度?在上述代码中,i0和i1分别代表图像的行(高度)和列(宽度)。在cv::Mat的at函数中,第一个参数i0表示行索引,第二个参数i1表示列索引。所以,i0表示图像的高度,i1表示图像的宽度。

Reference
opencv图像数组坐标系