1、环境:VS2013、Opencv2.4.9
2、Time:20180907
3、Info:
1用指针访问像素,速度最快;2通过迭代器访问,最安全;3动态地址计算,通过at()函数实现
#include "stdafx.h"
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat Img = imread("lean.jpg", 0);
if (!Img.data)
{
cout << "could not open" << endl;
return -1;
}
imshow("src", Img);
Mat d_Img = Img.clone();
const int channels = d_Img.channels();
int nRows = d_Img.rows;
int nCols = d_Img.cols*channels;
//01用指针访问像素,速度最快
uchar *p;
for (int i = 0; i<d_Img.rows; i++)
{
p = d_Img.ptr(i);//获取每行首地址
for (int j = 0; j<d_Img.cols; j++)
{
if (p[j]>128)//按灰度128做阈值分割
p[j] = 0;
else
p[j] = 255;
}
}
/* //02通过迭代器访问,最安全
{
MatIterator_it,end;
for(it=d_Img.begin(),end=d_Img.end();it!=end;++it)
{
if(*it>128)
*it=0;
else
*it=255;
}
}
*/
/* // 03动态地址计算,通过at()函数实现
for(int i=0;i
{
for(int j=0;j
{
if(d_Img.at(i,j)>128)
d_Img.at(i,j)=0;
else
d_Img.at(i,j)=255;
}
}
*/
imshow("dst", d_Img);
waitKey(0);
return 0;
}
原图:
01指针访问: