关于图像像素opencv行与列关系

  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<
}

其中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图像数组坐标系

你可能感兴趣的:(笔记,自动驾驶算法,opencv,人工智能,计算机视觉)