## openCV学习笔记 ##

openCV学习笔记


opencv对图像的每一个像素的读取操作可以分为三种方法

一、使用指针

int main(){
Mat img=imreag("1.jpg");
int rowNumber=img.rows;
int colNumber=img.cols*img.channels();
for(int i=0;i<rowNumber;i++)//航循环
{
    uchar *p=img.ptr<uchar>(i);//获取每一行的首地址
    for(int j=0;j<colNumber;j++)
    {
        p[j]=p[j]/100;//操作每个像素
    }
}
}

指针的速度是最快的。
二、使用迭代器
使用迭代器仅仅是获得Mat矩阵的begin和end。

int main(){
Mat img=imreag("1.jpg");
Mat_<Vec3b>::iterator  it=img.begin<Vec3d>();
Mat_<Vec3b>::iterator itend=img>end<Vec3d>();
for(;it!=itend;it++)//处理每个像素
{
    (*it)[0]=(*it)[0]/10*10;
    (*it)[1]=(*it)[1]/10*10;
    (*it)[2]=(*it)[2]/10*10;
}
}
迭代器的使用是非常安全的,不会出现越界的情况。

三、动态地址配合成员函数at

int main(){
Mat img=imread("1.jpg");
int rowNumber=img.rows;
int colNumber=img.cols*img.channels();
for(int i=;i<rowNumber;i++)
{
    for(int j;j<colNumber;j++)
    img.at<Vec3d>(i,j)[0]=img.at<Vec3d>(i,j)[0]/10*10;
    img.at<Vec3d>(i,j)[1]=img.at<Vec3d>(i,j)[1]/10*10;
    img.at<Vec3d>(i,j)[2]=img.at<Vec3d>(i,j)[2]/10*10;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值