访问像素指针

时间:2014-07-03 13:49:55

标签: pixel

你能解释一下这个双循环中访问像素是如何完成的吗?他们如何改变行和列以及像素的值?

for(int i=0;i<cv_ptr->image.rows;i++)
    {   
        float* ptr_img_A = cv_ptr->image.ptr<float>(i); 

        for(int j=0;j<cv_ptr->image.cols;j++)
        {                   
            *ptr_img_B=255*(*ptr_img_A)/3.5;
             ptr_img_A++;   
        }           
    }

谢谢。

1 个答案:

答案 0 :(得分:0)

首先,这是内部循环第一行中的完整代码还是 ptr_img_B 实际 ptr_img_A

其次,我建议按照它的内容命名变量。

for(int i=0;i<cv_ptr->image.rows;i++)
{   
    float* row_ptr = cv_ptr->image.ptr<float>(i); 

    for(int j=0;j<cv_ptr->image.cols;j++)
    {                   
        *row_ptr=255*(*row_ptr)/3.5;
         row_ptr++;   
    }           
}

所以基本上它会缩放图像中的每个像素,因子为255 / 3.5

关于像素的访问,它像这样存储在存储器中

      COL
ROW   1  2  3  4
  1   0  1  2  3
  2   4  5  6  7
  3   8  9 10 11
  4  12 13 14 15

然后为了访问,例如第3行的像素,col 2

float* row_ptr = cv_ptr->image.ptr<float>(row-1);
float value  = row_ptr[col-1];

最后,我希望你能享受openCV的时间,这是一个非常好的框架:)