操作基本像素

预备知识:

(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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值