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矩阵的行数,对应图片像素的高度。
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图像数组坐标系