Opencv图像的遍历_at_ptr

opencv_at_ptr 图像的遍历
http://www.cnblogs.com/ronny/p/opencv_road_2.html
1、at(i,j)
对图像降色彩,因为256*256*256实在太多了,在图像颜色聚类或彩色直方图时,
我们需要用一些代表性的颜色代替丰富的色彩空间,我们的思路是将每个通道的256种颜色用64种代替,
即将原来256种颜色划分64个颜色段,每个颜色段取中间的颜色值作为代表色。

 void colorReudce(Mat& image,int div)
  {
   for(int i=0; ifor(int j=0;jat(i,j)[0]= image.at(i,j)[0]/div*div+div/2;
         image.at(i,j)[1]= image.at(i,j)[1]/div*div+div/2;
         image.at(i,j)[2]= image.at(i,j)[2]/div*div+div/2;
     }
   }
}

image.at(i,j):取出灰度图像中i行j列的点。
image.at(i,j)[k]:取出彩色图像中i行j列第k通道的颜色点。
其中uchar,Vec3b都是图像像素值的类型

2用指针来遍历图像
上图对原图像进行了修改,采用指针的形式可以保留原图,制作原图的副本

void colorReduce(Mat& image,Mat& outImage,int div)
{
   outImage.create(image.size(),image.type());
   const unchar* indata;
   unchar* outdata;
   int row=image.rows;
   int col=image.cols*image.channels();
   for(int i=0;iimage.ptr(i);
      outdata=outImage.ptr(i);
      for(int j=0;j*div+div/2;
      }

   }
}

Mat 通过.ptr<>函数得到一行的指针,并用[]操作符访问某一列的像素值
第i行数据的指针:image.ptr(i)。
并用[]操作符访问某一列的像素值

你可能感兴趣的:(OpenCV,opencv)