前面用两篇介绍了像素的颜色空间缩减、查找表、遍历像素的三种方式、程序计时等,也说了一下每种方法的优缺点,现在用一个综合型的程序进行对比。方式是用三种方式对lena图像(220x220)进行处理,使其颜色种类从256中变成64种。在颜色空间缩减方法中讲过这种方式,即每个像素值除以4向下取整然后再乘以4即可将其颜色种类缩减到64种。
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
void colorReduceAt(Mat& srcImage, Mat& dstImageAt, int div);
void colorReduceIterator(Mat& srcImage, Mat& dstImageIterator, int div);
void colorReducePtr(Mat& srcImage, Mat& dstImagePtr, int div);
int main()
{
//加载lena图像
Mat srcImage = imread("lena.jpg");
//判断图像是否加载成功
if(srcImage.empty())
{
cout << "图像加载失败!" << endl << endl;
return -1;
}
else
cout << "图像加载成功!"

本文对比分析了OpenCV中像素遍历的三种方式(指针、at()动态地址分配、迭代器)在处理220x220 Lena图像时的效率。实验结果显示,指针方式最快,迭代器最慢,但迭代器更安全。官方建议在图像处理中考虑使用LUT()函数,因为它利用Intel Threaded Building Blocks实现多线程,速度最快。在Debug模式下,动态地址计算最慢,但在Release模式下可能优于迭代器。
最低0.47元/天 解锁文章
4109

被折叠的 条评论
为什么被折叠?



