OpenCV(3)——更方便的图像像素遍历

感谢C++的强大和灵活,灵活到我不愿钻研它。因此在解决各种问题时,我都寻找相对通用的方法。

OpenCV提供多种像素遍历方法,一搜一大堆,我之前都是使用迭代器来查询,如下:

Mat_<Vec3b>::iterator it = img.begin<Vec3b>();
Mat_<Vec3b>::iterator itend = img.end<Vec3b>();
for (; it != itend; ++it){
    cout<<(*it)[0]<<endl;
    cout<<(*it)[1]<<endl;
    cout<<(*it)[2]<<endl;
}

用起来还算方便,但今天需要处理灰度图像了,灰度图像,数据格式就不再是Vec3b了,我暂未找到它的数据格式,但是找到了适用于灰度图的像素遍历方法,而且也适用于三通道图像;这似乎更像是OpenCV提供给我们的方法,方法如下:

    int row = 0;
    int col = 0;
    cout << (int)*(img.data+img.step[0] * row + img.step[1] * col) << endl;

这句话就能输出灰度图img的第一行第一列像素的灰度值。img是Mat类型数据,Mat.data返回的是Mat的指针,row是行代号,0代表第一行,col是列代号,0代表第一列。

同样的语句,处理三通道图像则是:

    int row = 0;
    int col = 0;
    cout << (int)*(img.data+img.step[0] * row + img.step[1] * col) << endl;//第一通道
    cout << (int)*(img.data+img.step[0] * row + img.step[1] * col) +1<< endl;//第二通道
    cout << (int)*(img.data+img.step[0] * row + img.step[1] * col)+2 << endl;//第三通道

其他遍历方式,见:http://blog.csdn.net/daoqinglin/article/details/23628125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值