OpenCV学习笔记2.1 如何访问像素及c++随机数使用方法

总述:第二章的内容主要是对图像的元素即像素进行操作,对于二维灰度图来说像素值是八位即从0到255,0代表黑色255代表白色。彩色图像有三个通道按顺序来是蓝色、绿色、红色。故彩色图像的像素值为一个三维向量(B,G,R)
一、如何访问像素点
方法1:使用at<>访问
首先注意访问像素点之前必须知道像素点的数据类型
对于灰度图:image.at<数据类型>(col,row)=xxx
对于彩色图:image.at<数据类型>(col,row)[channel]=xxx
常用的数据类型对于灰度图来说比如有符号数char与无符号数uchar
对彩色图来说有专门的数据类型cv::Vec3b(包含三个无符号数)

※如果数据类型与像素的本身的数据类型不同则无法访问※

方法2:使用cv::Mat_
结构为cv::Mat_<数据类型>img(图像名)
img(col,row)=xxx

// 用Mat 模板操作图像
cv::Mat_ img(image);
img(50,100)= 0; // 访问第50 行、第100 列处那个值

二、实例展示:对一张彩色图片随机产生噪声点
首先有个c++中产生随机数的新方法提一下用法:
1.加入头文件
2.std::default_random_engine seed;//定义一个随机数引擎
3. uniform_int_distribution i (min,max);//定义随机数范围
4. i(seed)就是产生的随机数

#include 
#include 
#include 
#include 
using namespace std;
int main()
{
 void salt(cv::Mat, int);//噪声函数声明
 cv::Mat image = cv::imread("E:\\test.jpg", 1);//读入一个彩色图像
 salt(image,30000);//调用函数以添加噪声
 cv::namedWindow("Image");
 cv::imshow("Image", image);//显示结果
 cv::imwrite("E:\\NOISE.jpg", image);
 cv::waitKey(0);
 return 0;
}
void salt(cv::Mat image, int n)//噪声函数定义,n为噪声点数
{
 default_random_engine generator;//定义一个随机数引擎
 uniform_int_distribution
  randomRow(0, image.rows - 1);//定义随机数范围
 uniform_int_distribution
  randomCol(0, image.cols - 1);//定义随机数范围
 int i, j;
 for (int k = 0; k(j, i) = 255;
  }
  else if (image.type() == CV_8UC3) 
  { // 若为彩色图像 3 通道图像
   image.at(j, i)[0] = 255;
   image.at(j, i)[1] = 255;
   image.at(j, i)[2] = 255;
  }
 }
}

OpenCV学习笔记2.1 如何访问像素及c++随机数使用方法_第1张图片
原图像

OpenCV学习笔记2.1 如何访问像素及c++随机数使用方法_第2张图片
加入噪声后

你可能感兴趣的:(opencv,opencv)