指针访问
ptr操作时通过指针偏移的方式进行像素的查找、遍历和修改的,因此效率相对较高。
uchar pixel_value = Mat.ptr<uchar>(row)[col]; //获取某个像素值
Mat.ptr<uchar>(row)[col] = pixel_value; //修改某个像素值,也可以直接赋值为0,1,...,255
对于彩色图:row = Mat.rows; col = Mat.cols * Mat.channels();
对于灰度图:row = Mat.rows; col = Mat.cols;
uchar * datarow = Mat.ptr<uchar>(row); //获取某行的首地址
对于彩色图像也可以表示为:
Vec3b color_value = Mat.ptr<Vec3b>(row)[col];
Mat.ptr<Vec3b>(row)[col] = color_value;
实现示例:
Mat srcImage = Mat(7, 15, CV_8UC1,Scalar::all(0));
cout << "srcImage = " << endl << srcImage << endl;
namedWindow("原图",WINDOW_NORMAL);
imshow("原图", srcImage);
for (int i = 0; i < srcImage.rows; i++)
{
for (int j = 0; j < srcImage.cols; j++)
{
if (i==1 || i==5)
{
if ((j >= 1 && j <= 4) || (j >= 10 && j <= 13))
{
srcImage.ptr<uchar>(i)[j] = 255;
}
}
else if (i == 2 || i== 3 || i==4)
{
if (j>=1 && j<=13)
{
srcImage.ptr<uchar>(i)[j] = 255;
}
}
}
}
cout << "srcImage = " << endl << srcImage << endl;
namedWindow("修改图", WINDOW_NORMAL);
imshow("修改图", srcImage);
参考1:OpenCV3编程入门
参考2:https://blog.csdn.net/guduruyu/article/details/60867547
转载请标明出处。