Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将函数应用于图像的每个像素_C++_Opencv_Image Processing - Fatal编程技术网

C++ 将函数应用于图像的每个像素

C++ 将函数应用于图像的每个像素,c++,opencv,image-processing,C++,Opencv,Image Processing,在OpenCV中是否有一种方法可以获取一个输入矩阵、一个输出矩阵和一个函数,并将该函数应用于每个像素?例如,“检查像素值,如果低于某个阈值,则将其设置为0,否则保留该值” 我知道我可以迭代矩阵的像素,然后自己应用函数,只是想知道是否有一个函数可以节省我的工作量。您可以像这样应用lambda函数(假设用于灰度图像): std::for_each(mat.begin(),mat.end()) ,[](uchar和像素){ /*使用像素*/ }); 但是,它实际上是一个循环 编辑:如果要对图像应用

在OpenCV中是否有一种方法可以获取一个输入矩阵、一个输出矩阵和一个函数,并将该函数应用于每个像素?例如,“检查像素值,如果低于某个阈值,则将其设置为0,否则保留该值”


我知道我可以迭代矩阵的像素,然后自己应用函数,只是想知道是否有一个函数可以节省我的工作量。

您可以像这样应用lambda函数(假设用于灰度图像):

std::for_each(mat.begin(),mat.end())
,[](uchar和像素){
/*使用像素*/
});
但是,它实际上是一个循环



编辑:如果要对图像应用常规几何变换,可以使用。

如果性能是一个问题,您可能会对以下链接感兴趣:


如果使用灰度图像,您可以轻松创建适当的LUT。

性能方面,此解决方案与使用指针操作进行迭代相比有多好?@BananaCode恐怕没有太大区别。我在执行此代码时出错。不确定我是否遗漏了什么。错误:预期表达式std::for_each(test.begin(),test.end(),[](uchar和pixel){^LUT似乎不错,遗憾的是它只需要8位矩阵。有16位的吗?没有16位的预定义版本。
std::for_each(mat.begin<uchar>(), mat.end<uchar>()
              , [](uchar& pixel) {  
                     /* do something with pixel */ 
                });