OpenCV访问像素的颜色值

时间:2017-08-10 07:11:31

标签: c++ opencv image-processing matrix

p = img.ptr<uchar>(row);  

for (var i = 0; i < nColumns - 3; i+=3) {
 if(p[i] == b && p[i+1] == g && p[i+2] == r){
  count++;
 }
}

上面的代码显然会循环遍历每一行并查看每个像素的值。然后在确认像素是某种颜色时,它将增加计数变量的值。

我的困惑在于:

  1. 如果.ptr表示指针指向矩阵行的开头,那么如何将其封装在p变量中?
  2. 如果我们要访问像素的b, g, r(r,g,b)值 - 为什么我们要查看矩阵的不同成员?矩阵的一行是否代表单个像素?我以为矩阵的一行代表了图像的相应行。
  3. 换句话说,为什么这有效?

1 个答案:

答案 0 :(得分:1)

  1. ptr<T>是一个模板函数,当它被解释为T的数组时返回指向行开头的指针。
     因此,ptr<uchar>(row)是指向行号uchar的第一个row的指针。

  2. p不是指向行或第一个像素的指针,而是指向行上第一个像素的第一个组件的指针。
    由于图像是BGR图像,因此第一个像素的蓝色分量为p[0],绿色为p[1],红色为p[2]。 第二个像素的蓝色为p[3+0],绿色为p[3+1],红色为p[3+2]
    等等。

  3. 如果这是不可理解的,你可以在附近的C ++书中阅读有关数组和指针的更多信息。