OpenCV中访问图像像素的三种方法
0赞
发表于 6/11/2018 11:18:52 AM
阅读(1537)
OpenCV中访问图像像素的方法有三种:(1)指针访问像素:C操作符[];(2)迭代器操作图像像素;(3)动态地址计算方式访问像素:at。下面举例介绍其用法。
(1)指针访问像素:该方法是三种方法中速度最快的。Mat类提供的ptr函数可以得到图像任意行的首地址。自己所做测试时间:0.00278972秒。
for(int i = 0;i < rowNumber;i++) { uchar* data = OutputArray.ptr<uchar>(i); for(int j = 0;j < colNumber;j++) { data[j] = .....; } }
(2)迭代器操作图像像素:获得图像矩阵的begin和end,增加迭代从begin到end。将*操作符添加在迭代指针前,即可访问当前指向的内容。相比用指针直接访问可能出现越界问题,迭代器绝对安全。自己所做测试时间:0.123954秒。
Mat_<Vec3b>::iterator itBegin = OutputArray.begin<Vec3b>(); // 初始位置的迭代器 Mat_<Vec3b>::iterator itEnd = OutputArray.end<Vec3b>(); // 终止位置的迭代器 for(;itBegin != itEnd;itBegin++) { (*itBegin)[0] = ......; (*itBegin)[1] = ......; (*itBegin)[2] = ......; }
(3)动态地址计算方式访问像素:自己所做测试时间:0.144秒。
for(int i = 0;i < rowNumber;i++) { for(int j = 0;j < colNumber;j++) { OutputArray.at<Vec3b>(i,j)[0] = ......; OutputArray.at<Vec3b>(i,j)[1] = ......; OutputArray.at<Vec3b>(i,j)[2] = ......; } }