OpenCV计算机视觉编程(C++):操作像素

1、简介

所有的计算机视觉应用程序算法都涉及图像处理,而图像的本质就是有数值组成的矩阵,矩阵中的每个元素表示一个矩阵,如图1所示。在OpenCV中使用了cv::Mat结构来操作图像,对于灰度图像(黑白图片),像素是8位无符号数(数据类型unsigned char),0表示黑色,255表示白色。而对于彩色图片,使用了三通道(OpenCV:BGR)构建像素值,即彩色图片中每个像素都对应值三个数值。

OpenCV计算机视觉编程(C++):操作像素

图1 三通道356x536x3

2、实现

下面我们将使用下面的彩色图片作为输入对象,对图像的像素进行操作。

OpenCV计算机视觉编程(C++):操作像素

图2 356x536x3

包含以下内容:

  1. 访问像素
  2. 用指针扫描图像
  3. 用迭代器扫描图像
  4. 编写高效的图像扫描循环
  5. 扫描图像并访问相邻的图像
  6. 实现简单的图像运算
  7. 图像重映射



(1)访问像素

图像的本质就是一个由数值组成的矩阵。在opencv中使用cv::Mat结构来操作图像。若要访问矩阵中的每个独立的元素,则需要指定它的行号和列好即可,返回的元素可以是单个像素,也可以是多通道的数值向量。

为了展示如何访问像素值,我们在图片中加入椒盐噪声(salt-and-pepper noise)特效说明。在这里简单介绍什么是椒盐噪声,椒盐噪声就是随机选择一些像素,并把这些像素的颜色替换为黑色或者白色,在这里我们设为白色。

1)首先,添加OpenCV库以及C++的random库

OpenCV计算机视觉编程(C++):操作像素

图3 添加库文件

2)然后,编写椒盐噪声函数

cv::Mat image表示输入的图像,n是噪声的个数(修改像素的个数)

OpenCV计算机视觉编程(C++):操作像素

图4 椒盐噪声函数

3)主函数

OpenCV计算机视觉编程(C++):操作像素

图5 主函数

4)运行结果

cv::Mat类中包含多种方法,来访问图像的各种属性; 利用公有成员cols和rows获取图像的列数和函数,利用cv::Mat的at(int y, int x)方法访问元素, x是列号,y是行号。

OpenCV计算机视觉编程(C++):操作像素

图6 读取图片为三通道彩色

OpenCV计算机视觉编程(C++):操作像素

图7 读取图片为灰度图片

感兴趣的同学朋友们,欢迎点赞、收藏和转发。受制于篇幅,后面有时间会分享用迭代器扫描图像、编写高效的图像扫描循环、扫描图像并访问相邻的图像、实现简单的图像运算以及图像重映射等内容。


分享到:


相關文章: