0

我想知道 OpenCV 中是否有任何函数可以在 STL 中与两个cv::Mat类似的对象一起操作?std::tranform

例如,

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

在哪里

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

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

4

1 回答 1

7

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

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 lambda,即使在某些特定情况下也是可能的。

于 2013-06-05T10:14:28.857 回答