小白,入门中,不足其指正。刚刚接触opencv,从一个Matlab风格的编程环境突然跳转到C++,实在有些不适。单就pixels scanning花了好长时间研究。opencv-tutorials给出了四种方法。这里将比较其中最高效的方法与Mat类里定义的at()的效率。
本文以opencv-tutorials中给出的color reduction 为例进行比较。
图像的读取
为了简化问题,直接对灰度图进行操作,灰度图的获取可以用Mat类里的imread函数(每每看到这个函数都很激动,又有了Matlab的感觉)。
//read the image data
Mat GrayImage;
GrayImage = imread("test.jpg",);
//show the image that read
namedWindow("OriginalGrayImage");
imshow("OriginalGrayImage",GrayImage);
其中imread的参数0表示的就是读取灰度图。相比于Matlab里面还要用rgb22gray转化,这里就方便一点了哈!
原图:
灰度读取效果:
lookup table的产生
我们的目的是把读取的图像像素值进行量化,如果将0~255的像素量化成4级,就需将0~63的像素计算成0,64~127的像素计算成为64……
因为在C++编译过程中,uchar/int的结果还是uchar,所以直接利用下面公式就可以得到