OpenCV之像素访问(1)

方法1.直接访问法
如果图像为单通道    src. at<uchar>(j,i)
如果图像为三通道    src.at<Vec3b>(j,i)[channel]
例程:
图像中添加椒盐噪声
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/core/core.hpp"
#include<iostream>
usingnamespacecv;
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{
Matsrc= imread("D:\\1.jpg");
intloop= 100000;
if(!src.data)
{
cout<<"Image loading failed"<<endl;
}
Matoutput;
src.copyTo(output);//注解1
if(output.channels()==1)
{
for(intk=0;k<loop;k++)
{
inti=rand()%output.cols;
intj=rand()%output.rows;
output.at<uchar>(j,i)=255;
}
}
if(output.channels()==3)
{
for(intk=0;k<loop;k++)
{
inti=rand()%output.cols;
intj=rand()%output.rows;
output.at<Vec3b>(j,i)[0]=255;//B
output.at<Vec3b>(j,i)[1]=255;//G
output.at<Vec3b>(j,i)[2]=255; //R
}
}
namedWindow("src",WINDOW_AUTOSIZE);
namedWindow("output",WINDOW_AUTOSIZE);
imshow("src",src);
imshow("output",output);
waitKey(0);
return0;
}
注解1:copyTo语句是值的传递,对复制后图像进行处理不会影响原始图像,程序运行结果如下:
 
如果将此行代码改为“output=src;”程序运行结果如下:
 
可以看出“output=src;”实现的数据的复制实际上是使得output和src两者均指向同一图像数据,对复制后图像进行处理会影响原始图像
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值