晒晒图像遍历速度对比
以下列举各种用法的用例。
1、
for(int j = 0;j<n;j++)
{
uchar* data = image.ptr<uchar>(j);
for(int i = 0;i<nc;i++)
{
data[i] = data[i]/div*div+div/2;
}
}
上例中,ptr获得了任意行的首地址,可以使用自加的方法替代,
*data++=*data/div*div+div2;
3、at的方法,相对速度慢很多了
if(image.channels()==1){
image.at<uchar>(row,col)=255;
}
else if (image.channels()==3){
image.at<cv::Vec3b>(row,col)[0]=255;
image.at<cv::Vec3b>(row,col)[1]=255;
image.at<cv::Vec3b>(row,col)[2]=255;
//这里需要注意中括号
对于多通道图像,}
4、
for(int i = 0;i<image.cols*image.channels();i+
+)
这种办法内层循环需要不断计算每行的元素个数,较好的方法是先设一个变量,存放image.cols*image.channels()的值,将这个变量放进来循环。