gpt4 book ai didi

c++ - OpenCV 访问像素的颜色值

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:55 29 4
gpt4 key购买 nike

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) 值 - 为什么我们正在查看矩阵的不同成员?矩阵的一行代表一个像素吗?我认为矩阵的一行代表图像的相应行。

换句话说,为什么这行得通?

最佳答案

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

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

如果这难以理解,您可以在附近的 C++ 书籍中阅读有关数组和指针的更多信息。

关于c++ - OpenCV 访问像素的颜色值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45606800/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com