类似于OpenCV中cv :: Mat的std :: transform函数

Ras*_*sim 0 c++ opencv

我想知道OpenCV中是否有任何功能,它在STL中运行两个cv::Mat对象std::tranform

例如,

cv::transform(src1, src2, dst, bin_function);
Run Code Online (Sandbox Code Playgroud)

哪里

  • src1src2:相同大小的输入矩阵(cv :: Mat).
  • dst :输出矩阵与输入相同.
  • bin_function :二进制函数或函数对象,它接受两个元素作为参数(两个矩阵中的每一个),并返回一些结果值.

我试图在文档中搜索但没有找到这样的东西.

Ral*_*zky 7

据我所知,OpenCV还没有这样的功能.但是,您可以std::transformcv::Mat迭代器上使用STL算法,如下所示:

std::transform( src1.begin<float>(), src1.end<float>(), 
                src2.begin<float>(), dest.begin<float>(), bin_function );
Run Code Online (Sandbox Code Playgroud)

请务必使用正确的模板类型参数.因此,如果您有一个3通道矩阵,例如每个通道有8位,那么请使用Vec3b而不是float.

但要注意通常的STL陷阱.src1,src2并且dest在你打电话之前应该有相同数量的元素std::transform.如果你需要这种通用性,你可以考虑自己编写一个包装器函数cv::transform,它会检查它,为内存保留dest.动态查找模板参数的正确类型可能很困难,因为bin_function需要接受所有可能的参数.但是,如果使用带auto参数的C++ 14 lambdas,即使在某些特定情况下也是可能的.