crazybird

OpenCV中访问图像像素的三种方法

0
阅读(1317)


OpenCV中访问图像像素的方法有三种:(1)指针访问像素:C操作符[];(2)迭代器操作图像像素;(3)动态地址计算方式访问像素:at。下面举例介绍其用法。

(1)指针访问像素:该方法是三种方法中速度最快的。Mat类提供的ptr函数可以得到图像任意行的首地址。自己所做测试时间:0.00278972秒。

for(int i = 0;i < rowNumber;i++) { uchar* data = OutputArray.ptr(i); for(int j = 0;j < colNumber;j++) { data[j] = .....; } }


(2)迭代器操作图像像素:获得图像矩阵的begin和end,增加迭代从begin到end。将*操作符添加在迭代指针前,即可访问当前指向的内容。相比用指针直接访问可能出现越界问题,迭代器绝对安全。自己所做测试时间:0.123954秒。

Mat_::iterator itBegin = OutputArray.begin(); // 初始位置的迭代器 Mat_::iterator itEnd = OutputArray.end(); // 终止位置的迭代器 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(i,j)[0] = ......; OutputArray.at(i,j)[1] = ......; OutputArray.at(i,j)[2] = ......; } }
Baidu
map