opencv(2)- 处理像素值

  opencv中使用Mat数据类型表示图像,这是类似int、float等传统类型的一种opencv中定义的数据类型。

  opencv常见的数据类型:

    point:代表二维点,用于图像坐标点。如point(20, 80).

    scalar:表示4元素标量,常用于RGB颜色值,一般第四个参数用不到。

 

  像素是由颜色空间或通道数与数据类型来描述的。

  opencv像素的数据类型由表达式来表述:CV_ABCD.

  A:每个像素占多少位。

  B:是否有符号。

  C:类型前置码。

  D:通道数目。

  如CV_8UC3表示每个像素8位,无符号,因为无符号所以使用Char表示像素,每个像素3个通道。

  RGB三原色则使用CV_8UC3表示。

  

  对于一幅彩色图像,如lena.jpg,通过默认Mat image = imread("lena.jpg")读取到的即为RGB的彩色图像。

  彩色图像可通过Mat的方法at获得,如获取y行x列的像素值:image.at<Vec3b>(y, x)[c]。其中c为RGB的通道索引。

  对于一幅彩色图像来说,要对每一像素进行处理时,要按照宽、高、通道数的循环来处理像素,如:

1 for(int y = 0; y < image.rows; y++)
2     for(int x = 0; x < image.cols; x++)
3         for(int c = 0; c < image.channels(); c++)
4             new_images.at<Vec3b>(y, x)[c] = 0;

   注意:在处理像素点的时候,rows对应于图像的高,即point的y;cols对应于图像的宽,即point的x。

    而Mat.at(y, x)中的y对应于rows,x对应于cols。

posted @ 2018-05-15 10:37  自强厚德  阅读(724)  评论(0编辑  收藏  举报