Mat的lambda方式像素高效遍历(C++11)
文章目录
- Mat的lambda方式像素高效遍历(C++11)
- 前言
- 一、Mat的lambda方式像素高效遍历
- 二、代码实现
- 总结
前言
图像遍历是图像处理中的经典操作,快速高效的进行像素遍历对性能的提升至关重要。
一、Mat的lambda方式像素高效遍历
OpenCV4开始支持,通过Mat的forEach方式结合C++11 lambda表达式,实现对Mat对象快速像素遍历。语法如下:
void cv::Mat::forEach(const Functor & operation)
// 其中operation是一个C++11 lambda表达式,同时也是一个匿名的C++函数。
二、代码实现
#include <iostream>
#include <opencv.hpp>
using namespace std;
int main()
{
cv::Mat src = cv::imread("F:/work_study/algorithm_demo/lambda.jpg");
if (src.empty())
{
cout << "Image Empty" << endl;
return -1;
}
double start = (double)cv::getTickCount();
// foreach方式遍历图像
src.forEach<cv::Vec3b>([](cv::Vec3b& p,const int* position)->void {
p[0] = 255 - p[0];
p[1] = 255 - p[1];
p[2] = 255 - p[2];
});
cout <<(((double)cv::getTickCount() - start)) / cv::getTickFrequency()<< endl;
cv::imwrite("dst.jpg", src);
cv::waitKey(0);
return 0;
}
总结
本文主要介绍了一种新的opencv支持的基于lambda像素遍历方式,快速高效。