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

2023-12-18 16:20:34
  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图像数组坐标系

文章来源:https://blog.csdn.net/qq_40464599/article/details/135061710
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。