我想知道OpenCV中是否有任何函数在STL中使用两个cv::Mat
个对象std::tranform
进行操作?
例如,
cv::transform(src1, src2, dst, bin_function);
其中
src1
和src2
:相同大小的输入矩阵(cv :: Mat)。dst
:与输入相同的输出矩阵。bin_function
:二进制函数或函数对象,它接受两个元素作为参数(两个矩阵中的每一个),并返回一些结果值。我试图在文档中搜索但没有找到这样的东西。
答案 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
之前,src2
,dest
和std::transform
应具有相同数量的元素。如果你需要这种通用性,你可以考虑自己编写一个包装函数cv::transform
来检查它,为dest
保留内存。动态查找模板参数的正确类型可能很困难,因为bin_function
需要接受所有可能的参数。但是,如果使用带有auto
参数的C ++ 14 lambdas,即使在某些特定情况下也是可能的。