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

5
有没有一种方法在OpenCV中,可以接受一个输入矩阵、一个输出矩阵和一个函数,并将该函数应用于每个像素?例如一个函数,如“检查像素的值,如果低于某个阈值,则将其设置为0,否则保持原值”。
我知道我可以自己迭代矩阵中的像素并应用函数,只是想知道是否有一个函数可以节省我的工作。
2个回答

3
如果性能是一个问题,那么以下链接可能会对您有所帮助: 如果您使用灰度图像,可以轻松地创建适当的LUT。

LUT看起来不错,但遗憾的是它只支持8位矩阵。有没有支持16位的呢? - spurra
没有预定义的16位版本。 - bjoernz

1
您可以这样应用lambda函数(假设为灰度图像):
std::for_each(mat.begin<uchar>(), mat.end<uchar>()
              , [](uchar& pixel) {  
                     /* do something with pixel */ 
                });

但实际上,这是一个循环。
编辑:如果你想对图像应用一般的几何变换,你可以使用remap

从性能角度来看,与使用指针操作迭代相比,这种解决方案有多好? - spurra
@BananaCode 我担心这里不会有太大区别。 - herohuyongtao
当我执行这段代码时,出现了错误。不确定是否有遗漏。错误:预期表达式 std::for_each(test.begin<uchar>(), test.end<uchar>(), [](uchar& pixel) { ^ - AeroVTP
有用的信息:如果图像的数据类型是无符号的,请使用uchar,否则如果是实值请使用float。在lambda函数中,原地修改像素;不需要返回任何内容。 - leoll2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接