opencv mat数据类型用指针ptr正确表示的方法
opoenCv中的Mat 的数据类型是可以通过指针 以ptr的形式来索引或者遍历的。
第一种方法
cv::Mat image = cv::Mat(400, 600, CV_8UC1); //宽400,长600
uchar * data00 = image.ptr<uchar>(0);
上边表示的第一行第1个像素的指针。
uchar * data10 = image.ptr<uchar>(1);
上边表示第2行第1个像素指针。
可以通过*data00 ++, 或者data00[j]来向后索引第一行的第j个元素。
使用方法如下:
}
另一种方法可以如下
uchar data01 = image.ptr<uchar>(0)[1];
表示第1行的第2个像素的数值。
image有400行,有400*600个像素。假设现在你想得到第3行第42个像素的指针,如果你写成:
uchar * data = image.ptr<uchar>(3*image.cols + 41);
这样写是错误的,会出现上面的错误。你得到的不是第3行第42个像素的指针,而是第(3×image.cols + 41)行第0个像素的指针,因为没有(3×image.cols + 41)行,所以没有这个指针,所以错误。
正确的写法:
uchar data = image.ptr<uchar>(3)[41];
使用方法:
int Radius = 4;
int nRow = Radius*2;
int nCol = Radius;
int startX = Xr;
int startY = Yr ;
int cnt =0;
int rr = Radius;
int m,n;
for ( m = startY-rr; m < startY+rr; m++)
{
//从左到右的列也就是x坐标
for ( n = startX; n < (startX + nCol); n++)
{
uchar data = img3.ptr<uchar>(m)[n];
printf("(%d,%d):%d \n",m,n,data);
}
}