1、简介
所有的计算机视觉应用程序算法都涉及图像处理,而图像的本质就是有数值组成的矩阵,矩阵中的每个元素表示一个矩阵,如图1所示。在OpenCV中使用了cv::Mat结构来操作图像,对于灰度图像(黑白图片),像素是8位无符号数(数据类型unsigned char),0表示黑色,255表示白色。而对于彩色图片,使用了三通道(OpenCV:BGR)构建像素值,即彩色图片中每个像素都对应值三个数值。
2、实现
下面我们将使用下面的彩色图片作为输入对象,对图像的像素进行操作。
包含以下内容:
- 访问像素
- 用指针扫描图像
- 用迭代器扫描图像
- 编写高效的图像扫描循环
- 扫描图像并访问相邻的图像
- 实现简单的图像运算
- 图像重映射
(1)访问像素
图像的本质就是一个由数值组成的矩阵。在opencv中使用cv::Mat结构来操作图像。若要访问矩阵中的每个独立的元素,则需要指定它的行号和列好即可,返回的元素可以是单个像素,也可以是多通道的数值向量。
为了展示如何访问像素值,我们在图片中加入椒盐噪声(salt-and-pepper noise)特效说明。在这里简单介绍什么是椒盐噪声,椒盐噪声就是随机选择一些像素,并把这些像素的颜色替换为黑色或者白色,在这里我们设为白色。
1)首先,添加OpenCV库以及C++的random库
2)然后,编写椒盐噪声函数
cv::Mat image表示输入的图像,n是噪声的个数(修改像素的个数)
3)主函数
4)运行结果
cv::Mat类中包含多种方法,来访问图像的各种属性; 利用公有成员cols和rows获取图像的列数和函数,利用cv::Mat的at(int y, int x)方法访问元素, x是列号,y是行号。
感兴趣的同学朋友们,欢迎点赞、收藏和转发。受制于篇幅,后面有时间会分享用迭代器扫描图像、编写高效的图像扫描循环、扫描图像并访问相邻的图像、实现简单的图像运算以及图像重映射等内容。
閱讀更多 AI機器學習與數據挖掘 的文章