#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat src(3, 3, CV_8UC1, Scalar(1));//创建一个3*3矩阵,类型是8位无符号单通道,每个元素值都是1。
for (int i = 0; i < src.rows; i++)//遍历矩阵每一行。
{
//uchar* data1 = (src.data + i*src.step);用此代码,输出要转成int类型
float* data1 = (float*)(src.data+i*src.step);//老方法,src.data表示矩阵第0行的首地址,src.step表示矩阵的一行占用的字节数,又名:“步长”,在这里我们认为src.data每加一个步长,就顺位得到下一行的首地址。
//uchar* data2 = src.ptr<uchar>(i);用此代码,输出要转成int类型
float*data2 = src.ptr<float>(i);//新方法,利用模板类函数ptr得到第i行的首地址。
//输出两种方法计算的得到的地址,若是相同则代表方法无误。
cout << "data1: "<<data1 << endl;
cout <<"data2 : " <<data2 << endl;
}
waitKey(0);
system("pause");
return 0;
}
以下是输出:
data1: 00C4BDC0
data2 : 00C4BDC0
data1: 00C4BDC3
data2 : 00C4BDC3
data1: 00C4BDC6
data2 : 00C4BDC6
两种方法计算的同一行的地址是一样的。