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

时间:2013-06-05 09:59:55

标签: c++ opencv

我想知道OpenCV中是否有任何函数在STL中使用两个cv::Mat个对象std::tranform进行操作?

例如,

cv::transform(src1, src2, dst, bin_function);

其中

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

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

1 个答案:

答案 0 :(得分:7)

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

std::transform( src1.begin<float>(), src1.end<float>(), 
                src2.begin<float>(), dest.begin<float>(), bin_function );

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

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