【问题标题】:Apply function to each pixel of the image将函数应用于图像的每个像素
【发布时间】:2014-03-14 21:07:07
【问题描述】:

OpenCV 中是否有一种方法,它接受一个输入矩阵、一个输出矩阵和一个函数,并将这个函数应用于每个像素?例如“检查像素值,如果低于某个阈值,则将其设置为0,否则保持该值”之类的功能

我知道我可以遍历矩阵的像素并自己应用该函数,只是想知道是否有一个函数可以为我节省这项工作。

【问题讨论】:

    标签: c++ opencv image-processing


    【解决方案1】:

    如果您担心性能问题,您可能会对以下链接感兴趣:

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

    【讨论】:

    • LUT 看起来不错,可惜它说它只需要 8 位矩阵。有 16 位的吗?
    • 没有预定义的 16 位版本。
    【解决方案2】:

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

    std::for_each(mat.begin<uchar>(), mat.end<uchar>()
                  , [](uchar& pixel) {  
                         /* do something with pixel */ 
                    });
    

    但是,它实际上是一个循环。


    编辑:如果您想对图像应用通用几何变换,可以使用remap

    【讨论】:

    • 在性能方面,与使用指针操作进行迭代相比,此解决方案有多好?
    • @BananaCode这里恐怕不会有太大区别。
    • 执行此代码时出现错误。不确定我是否遗漏了什么。错误:预期表达式 std::for_each(test.begin(), test.end(), [](uchar& pixel) { ^
    • 有用信息:如果图像数据类型是无符号的,使用uchar,否则使用float,如果是实值。在 lambda 函数中,就地修改像素;无需退货。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 2011-05-03
    • 2016-02-09
    相关资源
    最近更新 更多