操作基本像素

来源:互联网 发布:python计算机视觉编程 编辑:程序博客网 时间:2024/06/12 13:28

预备知识:

(1) opencv2中用于存储图像数据为Mat类型,优点是它是一个类,可以自动分配和释放内存
(2) image.data是指向已经分配的内存块,另外image.ptr(j)可以返回每一行的地址,data是成员变量,而ptr是成员函数,一般使用后者;其中data返回的是一个unsigned char的指针
(3) image.size()返回的是一个结构体,实际上包括width和weight的两个成员变量
(4) flip(image,result,0)该函数实现图像反转,其中0表示水平翻转,1表示垂直翻转
(5) 浅拷贝 Mat a;a=image;或Mat c(image),浅拷贝虽然有不同的矩阵头,但是指向同一块内存空间
(6) 深拷贝 Mat b,c;b=image.clone();第二种方式image.copyTo(c);不共享内存空间
(7) 成员函数at(int x,int y)可以用来存取元素,但是必须在编译时知道元素的数据类型,因为它是模版函数,即at(i,j)
(8) Vec3b由三个uchar组成的向量,可以通过操作符[]来获取
(9) Mat_是Mat的模板之类,用之前需要知道矩阵的类型
(10) Image.total()返回总像素的个数;image.elemSize()返回一个像素的大小;image.step返回行宽,即一行中所包含的字节数
(11) Static_csat进行强制类型转换

功能:实现椒盐噪声,顾名思义,随机的将像素点设置为白色或者黑色void salt(Mat& image1,int n){for(int i=0;i<n;i++){int j=rand()%(image1.rows);int k=rand()%(image1.cols);if(image1.channels()==1)image1.at<uchar>(j,k)=255;else if(image1.channels()==3){image1.at<Vec3b>(j,k)[0]=255;image1.at<Vec3b>(j,k)[1]=255;image1.at<Vec3b>(j,k)[2]=255;}}}
0 0
原创粉丝点击