一、存取像素值
1.概念及原理
(1)图像像素:一张图像是一个由数值组成的矩阵。这也是Opencv2用cv::Mat这个数据结构来表示图像的原因。矩阵的每一个元素代表一个像素。对于灰度图像而言,像素由8位无符号数来表示,其中0代表黑色,255代表白色。对于彩色图像而言,每个像素需要三个这样的8位无符号数来表示三个颜色通道(红、绿、蓝)。因此,在这种情况下,矩阵的元素是一个三元数。
(2)椒盐噪点:是一种特殊的噪点,顾名思义,它随机将部分像素设置为白色或者黑色。在传输过程中如果部分像素值丢失,那么这种噪点就会出现。
2.实验:
将一张彩色图像随机挑选若干像素,并将其设置为白色.
源码:
#include<iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
void salt(cv::Mat &image, int n){
for (int k = 0; k < n; k++){
int i = rand() % image.cols;
int j = rand() % image.rows;
if (image.channels()==1) //灰度图
{
image.at<uchar>(j, i) = 255;
}
else if (image.channels() == 3) //彩色图
{
image.at<cv::Vec3b>(j, i)[0]